Lucene 3.5和Solr 3.5:大幅降低內存用量、SearcherManager和深度分頁支持
Lucene項目管理委員會宣布Apache Lucene 3.5.0和Apache Solr 3.5.0已經可以使用。Lucene是一個高性能、支持全文搜索的文本搜索開發庫。Solr是一個獨立的搜索服務器,其核心使用了Lucene來做索引和搜索。
Lucene 3.5.0版本的主要變化包括:
- 降低內存消耗。現在建立詞匯索引需要的內存比以前降低了3到5倍,實現這一點,是使用了更有效的內存數據結構來保存詞匯。
- 深度分頁支持。加入IndexSearcher.searchAfter方法,它在特定的ScoreDoc之后會返回結果。你可以將上一頁的最后一個document傳遞給searchAfter方法,以得到下一頁的結果。
- SearcherManager。加入了 org.apache.lucene.search.SearcherManager類, 簡化了在多個搜索線程中對IndexSearcher的分享和重新開啟。底層的IndexReader實例如果不再被引用,可以安全關閉,其中使用了 IndexReader的引用計數。還使用了獲取方法來取得一個IndexSearcher,還有釋放方法來關閉取得的IndexSearcher。
- SearcherLifetimeManager。加入了org.apache.lucene.search.SearcherLifetimeManager類,提供跨越多個請求的索引的統一視圖。它簡化了服務多個請求的同一個IndexSearcher實例的使用,在分頁或上下鉆取搜索結果時,有更好的用戶體驗。
- IndexWriter.optimize()棄用。IndexWriter.optimize方法不再使用,并被重新命名為forceMerge。這么做,是不再鼓勵使用該方法,因此它的操作成本很高,而且只能在靜態索引上使用。
- IndexReader.reopen()重命名。IndexWriter.reopen方法替代為openIfChanged。如果索引沒有變化,IndexReader.openIfChanged會返回null。一般來說,相對開啟新的IndexReader,該方法成本更低。
- NGramPhraseQuery。org.apache.lucene.search.NGramPhraseQuery是PhraseQuery類,針對n-gram模型的查詢做了優化。當使用n-gram分析時,可以加速查詢速度30%-50%。
可以訪問Lucene 3.5發布說明來了解完整的變更列表。
Solr 3.5.0的主要變化有:
- Lucene 3.5.0。來自Lucene 3.5.0的缺陷修復和改進,主要是保持詞匯索引需要的內存數量大幅減少。
- 分布式結果分組。支持分布式搜索結果分組,也被稱為field collapsing。該特性限制了每“組”展示的文檔數目,作為一個字段的唯一值定義,現在支持分布式搜索。
- 語言檢測。新的模塊“langid”加入了在索引前檢測文檔語言的能力,以輔助正確決策。使用了Apache Tika的LanguageIdentifier 或Cybozu的語言檢測程序庫,作為UpdateRequestProcessor實現。
- 支持數字類型的sortMissingFirst和sortMissingLast。包括Trie在內的數字類型和日期類型現在支持sortMissingFirst和sortMissingLast。
- HunspellStemmerFilter。添加對Lucene的 HunspellStemmerFilter支持,這樣就可以支持90種語言的stemming詞根縮減功能。Hunspell本來是一個高級的拼寫檢查 庫,它因為用于OpenOffice套件而出名,現在在Solr中使用,提供stemming詞根縮減。
- hl.q參數。加入了可選的hl.q參數,如果給定值,在Highlighter(HighlightComponent類)中會重寫q參數。
可以訪問Solr 3.5發布說明來了解完整的變更列表。
Yonik Seeley是Apache Solr的創始人,同時也是Lucid Imagination的首席開源架構師和聯合創始人,他回答了InfoQ針對本次Lucene和Solr發布的一些問題。
InfoQ:對于大部分Lucene和Solr的用戶來說,這次發布能夠讓他們馬上用起來的有哪些功能?
Yonik Seeley:Lucene和Solr的用戶可以受益于詞匯索引大幅減少的內存用量、改進后的向量強調(vector highlighting)等等。Solr還加入了對分布式分組的支持,提供針對缺少首值或末值的數字字段排序的能力。Lucene還加入了對深度分頁的優化。
InfoQ:您是否推薦開發人員使用默認的新SearcherManager?
Yonik Seeley:對于剛剛開發基于Lucene的項目的人來說,用新的Lucene SearcherManager是個好的開始,但是沒必要把正常使用的自定義搜索的manager代碼遷移過來。對于Solr的用戶,searcher的管理從一開始就是內部實現的細節了。
InfoQ:Lucene和Solr 3.6有什么計劃?
Yonik Seeley:在開源軟件中很難說,因為沒有正式的路線圖。大部分的重大突破都發生在主干代碼中,發布時自然就是4.0了。Lucene已經完全更新了對索引機制,支持codec。Solr正在逐步轉向使用NoSQL data store,使用更先進的分布式索引功能。
InfoQ:我們什么時候才能看到帶有NRT功能的Solr正式版發布?
Yonik Seeley:LucidWorks是我們的Apache Solr的商業版本,基于主干代碼的穩定版本(4.0-dev),具備NRT功能。至于這個功能何時移植回Solr 3.x,現在還不清楚。Lucene和Solr 4.0版本應該在2012年某個時候發布。
想對它們有所了解,您可以從Apache的鏡像站點下載Lucene 3.5和Solr 3.5。Maven的用戶要使用Lucene,其groupId為org.apache.lucene,artifactId模式為lucene-*,版本是3.5.0。您也可以訂閱Lucene和Solr的郵件列表獲取最新信息。
本文轉載自: InfoQ