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