1. 什么是lucene
Apache Lucene是一個開放源程序的搜尋器引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自已需要自訂其功能。 Lucene是apache軟件基金會項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。
2. Lucene能做什么
Lucene使你可以為你的應用程序添加索引和搜索能力。Lucene可以索引并能使得可以轉換成文本格式的任何數據能夠被搜索。Lucene并不關心數據的來源、格式甚至它的語言,只要你能將它轉換為文本。這就意味著你可經索引并搜索存放于文件中的數據:在遠程服務器上的web頁面,存于本地文件系統的文檔,簡單的文本文件,微軟Word文檔,HTML或PDF文件或任何其它能夠提取出文本信息的格式。
同樣,利用Lucene你可以索引存放于數據庫中的數據,提供給用戶很多數據庫沒有提供的全文搜索的能力。一旦你集成了Lucene,你的應用程序的用戶就能夠像這樣來搜索:+George +Rice –eat –pudding, Apple –pie +Tiger, animal:monkey AND food:banana等等。利用Lucene,你可以索引和搜索email郵件,郵件列表檔案,即時聊天記錄,你的Wiki頁面……等等更多。
3. Lucene的優點
(1)索引文件格式獨立于應用平臺。Lucene定義了一套以8位字節為基礎的索引文件格式,使得兼容系統或者不同平臺的應用能夠共享建立的索引文件。
(2)在傳統全文檢索引擎的倒排索引的基礎上,實現了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達到優化的目的。Lucene提供了索引的擴展機制,因此索引可以動態擴展。
(4)設計了獨立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創立,用戶擴展新的語言和文件格式,只需要實現文本分析的接口。
(5)已經默認實現了一套強大的查詢引擎,用戶無需自己編寫代碼即使系統可獲得強大的查詢能力,Lucene的查詢實現中默認實現了布爾操作、模糊查詢、分組查詢等等。
(6)搜索過程優化。Lucene面向全文檢索的優化在于首次索引檢索后,并不把所有的記錄(Document)具體內容讀取出來,而起只將所有結果中匹配度最高的頭100條結果(TopDocs)的ID放到結果集緩存中并返回。
(7)Lucene的另外一個特點是在收集結果的過程中將匹配度低的結果自動過濾掉了。這也是和數據庫應用需要將搜索的結果全部返回不同之處
4. 查詢相關
Analyzer是分析器,它的作用是把一個字符串按某種規則劃分成一個個詞語,并去除其中的無效詞語,這里說的無效詞語是指英文中的“of”、 “the”,中文中的“的”、“地”等詞語,這些詞語在文章中大量出現,但是本身不包含什么關鍵信息,去掉有利于縮小索引文件、提高效率、提高命中率。
分詞的規則千變萬化,但目的只有一個:按語義劃分。這點在英文中比較容易實現,因為英文本身就是以單詞為單位的,已經用空格分開;而中文則必須以某種方法將連成一片的句子劃分成一個個詞語。
(1) 用通配符進行搜索
單個任意字符匹配的是所有可能單個字符。例如,搜索"text或者"test",可以這樣:te?t
多個任意字符匹配的是0個及更多個可能字符。例如,搜索test, tests 或者 tester,可以這樣:test*
您也可以在字符竄中間使用多個任意字符通配符。te*t
注意:您不能在搜索的項開始使用*或者?符號。
(2) 模糊查詢
Lucene支持基于Levenshtein Distance與Edit Distance算法的模糊搜索。要使用模糊搜索只需要在單獨項的最后加上符號"~"。例如搜索拼寫類似于"roam"的項這樣寫:roam~
這次搜索將找到形如foam和roams的單詞。
注意:使用模糊查詢將自動得到增量因子(boost factor)為0.2的搜索結果.
(3) 布爾操作符
布爾操作符可將項通過邏輯操作連接起來。Lucene支持AND, "+", OR, NOT 和 "-"這些操作符。(注意:布爾操作符必須全部大寫)
(4) 轉義特殊字符
Lucene支持轉義特殊字符,因為特殊字符是查詢語法用到的。現在,特殊字符包括
+ - && || ! ( ) { } [ ] ^ " ~ * ? : "
轉義特殊字符只需在字符前加上符號",例如搜索(1+1):2,使用查詢
"(1"+1")":2
5. 一些使用經驗
(1) 關鍵詞區分大小寫
OR AND TO等關鍵詞是區分大小寫的,lucene只認大寫的,小寫的當做普通單詞。
(2) 讀寫互斥性
同一時刻只能有一個對索引的寫操作,在寫的同時可以進行搜索。
(3) 文件鎖
在寫索引的過程中強行退出將在tmp目錄留下一個lock文件,使以后的寫操作無法進行,可以將其手工刪除。
(4) 時間格式
lucene只支持一種時間格式yyMMddHHmmss,所以你傳一個yy-MM-dd HH:mm:ss的時間給lucene它是不會當作時間來處理的。
(5) 索引更新
lucene不支持索引更新,必須是先刪除再新建索引,如果數據量很大且更新快則相當麻煩,本身建立索引是個漫長的過程,同時相當耗內存且很傷disk,不能實時的滿足查詢。
(6) 中間取索引
lucene不支持從中間取索引。例如:用戶取第十頁,lucene需要把前面所有的內容都要檢索出,然后所有的排序,過濾掉前面的然后返回。
(7) 英文查詢
若查詢英文,比如有一句話:jiangxi strong 如果你輸入jiang或者stron等不完整的一個詞,將不能查詢出結果,當你輸入jiangxi或者strong才能查詢出結果。
posted on 2008-10-31 17:33
老丁 閱讀(2688)
評論(0) 編輯 收藏 所屬分類:
搜索引擎 lucene