由於專案的需要,使用到了全文檢索技術,這裡將前段時間所做的工作進行一個實踐總結,方便以後查閱。在實際的工作中,需要靈活的使用lucene裡面的查詢技術,以達到滿足業務要求與搜尋效能提升的目的。
一、全文檢索介紹
1.1為什麼需要全文檢索
資料可以分為結構化資料和非結構化資料,對資料查詢時,結構化資料可以通過SQL語句等方式查詢,而非結構化資料(如txt,word等)無法用此方式查詢。
我們利用將非結構化資料轉化為非結構化資料(即先將檔案中單詞按空格拆分,把單詞建立一個索引,然後查詢索引,根據單詞和文件的關係找到文件列表,即全文檢索),進行快速查詢。
1.2什麼是全文檢索
先建立索引,然後查詢索引的過程是全文檢索
具有一次建立,多次使用的特點(建立的速度有點慢)。
二、全文檢索流程
1. 綠色表示索引過程,對要搜尋的原始內容進行索引構建一個索引庫,索引過程包括:確定原始內容即要搜尋的內容→採集文件→建立文件→分析文件→索引文件。
2. 紅色表示搜尋過程,從索引庫中搜尋內容,搜尋過程包括:使用者通過搜尋介面→建立查詢→執行搜尋,從索引庫搜尋→渲染搜尋結果。
三、全文檢索索引
3.1倒排索引
倒排索引即為全文檢索的核心的部分,所謂倒排索引,簡單地就是,根據單詞,返回它在哪個檔案中出現過,而且頻率是多少的結果。這就像百度裡的搜尋,你輸入一個關鍵字,那麼百度引擎就迅速的在它的伺服器裡找到有該關鍵字的檔案,並根據頻率和其他的一些策略(如頁面點選投票率)等來給你返回結果。這個過程中,倒排索引就起到很關鍵的作用。
3.2建立索引
你可以利用你的技術從資料庫、網際網路、爬蟲、word等方式獲取原始資料,即採集資訊
3.3構建索引文件
對應每個原始文件建立一個Document物件(擁有唯一的ID)
每個Document中包含多個Field
不同的Document可以有不同的Field
同一個Document可以有相同的Field
域中以鍵值對的形式儲存域的名稱和值
四、全文檢索使用
1、所需核心庫
lucene-core |
lucene核心庫 |
lucene-queryparser |
lucene查詢解析器 |
lucene-analyzers-common |
lucene預設分詞器 |
lucene-analyzers-smartcn |
lucene提供的中文分詞器 |
ik-analyzer |
開源中文分詞器 |
2、lucene查詢
查詢方式 |
意義 |
TermQuery | 精確查詢 |
TermRangeQuery | 查詢一個範圍 |
PrefixQuery | 字首匹配查詢 |
WildcardQuery | 萬用字元查詢 |
BooleanQuery | 多條件查詢 |
PhraseQuery | 短語查詢 |
FuzzyQuery | 模糊查詢 |
Queryparser | 萬能查詢(上面的都可以用這個來查詢到 |