1. 程式人生 > >Lucene全文檢索框架

Lucene全文檢索框架

Lucene全文檢索框架

1、什麼時Lucene?
是一個全文搜尋框架,而不是應用產品,他只是一種工具讓你能實現某些產品,並不像www.baidu.com拿來就能用
是apache組織的一個用java實現的全文搜尋引擎的開源專案

2、Luncen的工作方式?
提供的服務實際包含兩部分:一入一出
入:寫入,即將你提供的資料來源寫入索引
出:讀出,向用戶提供全文搜尋服務,讓使用者可以通過關鍵詞定位源

3、寫入流程
資料來源首先經過analyzer處理,包括:分詞,分成一個個單詞
將資料來源中需要的資訊加入Document的各個Field中,並把需要索引的欄位按照分詞的順序索引起來,把需要儲存的Field儲存起來。
將索引寫入儲存器,儲存器可以是記憶體或磁碟

4、讀出流程

使用者提供搜尋關鍵詞,經過analyzer處理。

對處理後的關鍵詞搜尋索引找出對應的Document。
使用者根據需要從找到的Document中提取需要的Field。

5、Lucene專業術語
Lucene 其實很簡單的,它最主要就是做兩件事:建立索引和進行搜尋 
來看一些在lucene中使用的術語,這裡並不打算作詳細的介紹,只是點一下而已----因為這一個世界有一種好東西,叫搜尋。
IndexWriter:lucene中最重要的的類之一,它主要是用來將文件加入索引,同時控制索引過程中的一些引數使用。
Analyzer:分析器,主要用於分析搜尋引擎遇到的各種文字。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁碟,一種是記憶體。一般情況將索引放在磁碟上;相應地lucene提供了FSDirectory和RAMDirectory兩個類。
Document:文件;Document相當於一個要進行索引的單元,任何可以想要被索引的檔案都必須轉化為Document物件才能進行索引。
Field:欄位。
IndexSearcher:是lucene中最基本的檢索工具,所有的檢索都會用到IndexSearcher工具;
Query:查詢,lucene中支援模糊查詢,語義查詢,短語查詢,組合查詢等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些類。
QueryParser: 是一個解析使用者輸入的工具,可以通過掃描使用者輸入的字串,生成Query物件。
Hits:在搜尋完成之後,需要把搜尋結果返回並顯示給使用者,只有這樣才算是完成搜尋的目的。在lucene中,搜尋的結果的集合是用Hits類的例項來表示的。

6、Lucene注意事項
索引不能太大,要不然效率會很低,大於1G的時候必須考慮公佈索引問題
不建議用多執行緒來建索引,產生的互鎖問題很麻煩,經常發現索引被lock,無法重新建議的情況
中文分詞是個大問題,目前免費的分詞效果都很差。如果有能力還是自己實現一個分詞模組,用最短路徑的切分方法,網上有教材和demo原始碼,可以參考。
建增量索引的時候很耗cpu,在訪問量大的時候會導致cpu的idle為0
預設的評分機制不太合理,需要根據自己的業務定製

整體來說lucene要用好不容易,必須在上述方面擴充他的功能,才能作為一個商用的搜尋引擎

ElasticSearch是基於Lucene開發的分散式搜尋框架

,包含如下特性:
分散式索引、搜尋
索引自動分片、負載均衡
自動發現機器、組建叢集
支援Restful 風格介面
配置簡單等。

一、國外優秀的ElasticSearch使用案例
GitHub
GitHub使用ElasticSearch搜尋20TB的資料,包括13億的檔案和1300億行程式碼
GitHub在2013年1月升級了他們的程式碼搜尋,由solr轉為ElasticSearch,目前叢集規模為26個索引儲存節點+8個客戶端節點(負責處理搜尋請求)

Mozilla
Mozilla公司以火狐著名,它目前使用WarOnOrange這個專案來進行單元或功能測試,測試結果以json方式索引到ElasticSearch中,開發人員可以非常方便的查詢Bug

Sony
Sony公司使用ElasticSearch作為資訊搜尋引擎