基於Lucene的全文檢索實踐

|舊市拾荒|發表於2021-11-07

由於專案的需要,使用到了全文檢索技術,這裡將前段時間所做的工作進行一個實踐總結,方便以後查閱。在實際的工作中,需要靈活的使用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 萬能查詢(上面的都可以用這個來查詢到

相關文章