1. 程式人生 > >Lucene(全文檢索)

Lucene(全文檢索)

介紹
Lucene是一個開放原始碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文字分析引擎。
在這裡插入圖片描述

在這裡插入圖片描述

A)什麼是索引庫
索引庫是Lucene的一個重要的儲存結構,它包括二部份:原始記錄表(value),詞彙/關健字(key)表,他們都是Map結構。
原始記錄表:存放的是原始記錄資訊,Lucene為其內容分配一個唯一的編號。
詞彙/關健字表:存放的是經過分詞演算法拆分出來的唯一單詞和該唯一單詞在原始記錄表中存在該單詞的唯一編號。

1)什麼是分詞器
採用一種策略/演算法,將中英文字中每個字元拆分開來,形成詞彙,以待使用者輸入關健字後搜尋
2)為什麼要分詞器
因為使用者輸入的搜尋的內容是一段文字中的一個關健字,和原始表中的內容有差別,
但做為搜尋引擎來講,又得將相關的內容搜尋出來,此時採用分詞器來最大限度 匹配原始表中的內容
3)分詞器工作流程
》按規則拆分出詞彙/關健字
》去除停用詞和禁用詞
》如果有英文,把英文字母轉為小寫,即搜尋不分大小寫

B)為什麼要將索引庫進行優化
在預設情況下,向索引庫中增加一個Document物件時,索引庫自動會新增一個副檔名叫*.cfs的二進位制檔案。
如果向索引庫中存Document物件過多,那麼*.cfs也會不斷增加,同時索引庫的容量也會不斷增加。

C)合併檔案,合併後的檔案是二進位制壓縮字元

》呼叫API強行合併且壓縮檔案
indexWriter.addDocument(document);
indexWriter.optimize();注意:只合並與壓縮*.cfs檔案
indexWriter.close();
》設定合併因子,自動合併檔案,預設10個檔案合併成一個檔案
indexWriter.addDocument(document);
indexWriter.setMergeFactor(50);
indexWriter.close();

搜尋結果排序【Sort】
1)影響網站排名的先後的有:參照SEO內部

》title/meta/
》網頁的標籤整潔
i)標籤有開始就有結束
ii)盡採用現在流行的div+css結構,不採用table
iii)得適當縮格
》網頁執行速度

如果瀏覽器載入你的網頁時間相對比別人較快時,你的頁網比別人排前。以上各種情況都綜合影響網頁的得分,即百度,Lucene內部有各自的一套演算法。

2)Lucene中的顯示相關度得分

》scoreDoc.score;

注意:預設情況下,Lucene是按相關度得分排序的,得分高排在前,得分低排在後
如果相關度得分相同,按插入索引庫的次序排序

3)Lucene中的設定相關度得分

》document.setBoost(10F);

注意:先設定得分,再新增Document

專案建立
1)建立javaweb工程,取名叫lucene-day01
2)匯入lucene相關的jar包
lucene-core-3.0.2.jar【Lucene核心包】
lucene-analyzers-3.0.2.jar【Lucene採用什麼分詞器演算法,預設漢字是一個字一個分詞,英文是一個單詞一個分詞】
lucene-highlighter-3.0.2.jar【Lucene會將搜尋出來的字,高亮顯示,提示使用者】
lucene-memory-3.0.2.jar【索引庫優化策略】
3)建立如下包結構
cn.itcast.javaee.lucene.entity
cn.itcast.javaee.lucene.firstapp
cn.itcast.javaee.lucene.secondapp
cn.itcast.javaee.lucene.crud
cn.itcast.javaee.lucene.utils
4)建立TestHelloLucene.java類,編寫createIndexDB()和searchIndexDB()二個業務方法

生產中使用
如果要增加多個索引內容進行查詢,需要自己建立一個配置表,然後從配置表中讀取建索引的資訊。
1、先讀配置表,哪些表要建索引
2、根據表資訊讀取該表中中哪些列要建索引
3、接著構造出取實際資料結果集的sql語句
4、根據結果集建索引