『壹』 全文檢索工具有哪些
1. Lucene
Lucene的開發語言是java,也是Java家族中最為出名的一個開源搜索引擎,在Java世界中已經是標準的全文檢索程序,它提供了完整的查詢引擎和索引引擎,沒有中文分詞引擎,需要自己去實現,因此用Lucene去做一個搜素引擎需要自己去架構.另外它不支持實時搜索,但linkedin和twitter有分別對Lucene改進的實時搜素. 其中Lucene有一個C++移植版本叫CLucene,CLucene因為使用C++編寫,所以理論上要比lucene快.
2. Sphinx
Sphinx是一個用C++語言寫的開源搜索引擎,也是現在比較主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空間換取事件的策略,在檢索速度上,和lucene相差不大,但檢索精準度方面Lucene要優於Sphinx,另外在加入中文分詞引擎難度方面,Lucene要優於Sphinx.其中Sphinx支持實時搜索,使用起來比較簡單方便.
3. Xapian
Xapian是一個用C++編寫的全文檢索程序,它的api和檢索原理和lucene在很多方面都很相似,算是填補了lucene在C++中的一個空缺.
4. Nutch
Nutch是一個用java實現的開源的web搜索引擎,包括爬蟲crawler,索引引擎,查詢引擎. 其中Nutch是基於Lucene的,Lucene為Nutch提供了文本索引和搜索的API.
對於應該使用Lucene還是使用Nutch,應該是如果你不需要抓取數據的話,應該使用Lucene,最常見的應用是:你有數據源,需要為這些數據提供一個搜索頁面,在這種情況下,最好的方式是直接從資料庫中取出數據,並用Lucene API建立索引.
5. DataparkSearch
DataparkSearch是一個用C語言實現的開源的搜索引擎. 其中網頁排序是採用神經網路模型. 其中支持HTTP,HTTPS,FTP,NNTP等下載網頁.包括索引引擎,檢索引擎和中文分詞引擎(這個也是唯一的一個開源的搜索引擎里有中文分詞引擎).能個性化定製搜索結果,擁有完整的日誌記錄.
6. Zettair
Zettair是根據Justin Zobel的研究成果為基礎的全文檢索實驗系統.它是用C語言實現的. 其中Justin Zobel在全文檢索領域很有名氣,是業界第一個系統提出倒排序索引差分壓縮演算法的人,倒排列表的壓縮大大提高了檢索和載入的性能,同時空間膨脹率也縮小到相當優秀的水平. 由於Zettair是源於學術界,代碼是由RMIT University的搜索引擎組織寫的,因此它的代碼簡潔精煉,演算法高效,是學習倒排索引經典演算法的非常好的實例. 其中支持linux,windows,mac os等系統.
7. Indri
Indri是一個用C語言和C++語言寫的全文檢索引擎系統,是由University of Massachusetts和Carnegie Mellon University合作推出的一個開源項目. 特點是跨平台,API介面支持Java,PHP,C++.
來自網路。
『貳』 哪位java高手可以告我如何實現對每一個word文檔進行全文檢索
首先通過POI讀取word,然後用lucene創建索引,索引結構:name:文件名,text:內容。創建好索引之後,搜索,然後統計搜索結果。
POI讀取word參考:
http://poi.apache.org/hwpf/index.html
http://www.laokboke.net/2011/10/29/java-poi-word/
lucene參考:
http://lucene.apache.org/
http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/
代碼自己寫的肯定是最符合需要的。
如果有問題可以隨時交流,我以前也做過用lucene處理類似問題的。
『叄』 Lucene doc 文件格式詳解
本文及後面關於Lucene的文章所採用的lucene 版本為8.1.0.
doc 文件主要用於保存term的倒排表信息,包括docId倒排鏈及term在docId的term freq信息等。倒排鏈是Lucene 進行全文檢索的核心數據結構,請特別關注這個數據結構
請參考 Lucene tim文件格式詳解 第三部分
文件頭部分主要內容為標識此文件類型為 Lucene50PostingsWriterDoc , 源碼部分在 Lucene50PostingsWriter 的123行,主要內容如下
開始本部分閱讀時,請注意一個在第3部分得到的結果及含義, 現在開始分析該部分內容
下面為term的doc信息。 主要邏輯是: 對於term的doc freq = 1的term來說,doc文件不保存這個term的doc信息,而是在 tim 文件中保存,doc 文件只保存doc freq > 1的term。在範例中,只有nice的doc freq > 1, 故只保存nice的doc倒排鏈
關於其它term(term freq = 1)的編碼方式,請參考 tim 文件相應的格式內容
footer區主要有以下內容
『肆』 如何用java的lucene對資料庫進行全文檢索
lucene是一個公用的全文索引組件,它的目標是把各種各樣格式的數據轉化成lucene特有的索引文件格式,這樣才能通過lucene的高速檢索機制進行全文檢索。
你的數據來源可以是關系資料庫,可以是word、execl、txt文檔,可以是html網頁,對於這些數據源,你必須將它們內部的數據讀取出來,並封裝成lucene的document實例,之後讓lucene幫你構建索引。
舉個例子:你的有一個用戶資料庫,裡面存儲了幾十萬的用戶信息,你現在要對這個資料庫進行全文索引,那麼你要做的事情是:
1.寫一段傳統的JDBC程序,講每條的用戶信息從資料庫讀取出來
2.針對每條用戶記錄,建立一個lucene document
Document doc = new Document();
並根據你的需要,將用戶信息的各個欄位對應luncene document中的field 進行添加,如:
doc.add(new Field("NAME","USERNAME", Field.Store.YES,Field.Index.UN_TOKENIZED));
然後將該條doc加入到索引中, 如: luceneWriter.addDocument(doc);
這樣就建立了lucene的索引庫
3.編寫對索引庫的搜索程序(看lucene文檔),通過對lucene的索引庫的查找,你可以快速找到對應記錄的ID
4.通過ID到資料庫中查找相關記錄
上面闡述了lucene的大體用法,不知道是不是說的很清楚。