Apache Lucene 5.0釋出,不再相容3.X系列版本

李小兵發表於2015-02-27

近日,Apache軟體基金會正式釋出了Apache Lucene 5.0版本,該版本的重大改進包括實現了更強大且安全的索引和降低了記憶體堆的使用。同時,該版本還實現了其他方面的一些改進和大量Bug的修改。本次更新共包括32項新特性、18項改進、30個Bug、40個API的修改以及其它方面的改進。

Lucene 5.0實現主要更新內容包括:

  1. 所有檔案的訪問方法都已基於Java NIO2的相關API進行了改進,這就使得Lucene的索引操作能夠更加安全地處理異常
  2. Lucene已實現了為每個segment和每次提交都儲存了唯一的id,從而使得Lucene能夠更加精確地實現索引檔案的複製
  3. 在索引合併的過程中,IndexWriter總會在合併前檢測已經損壞的segment,這就意味著當升級到5.0版本時,對4.X系列的索引進行合併時,會有一定的延遲
  4. 新增了RoaringDocIdSet和SparseFixedBitSet兩個類,從而實現了隨機寫和advance-able稀疏BitSet,索引所需堆大小能夠按照比例來設定多少位和共有多少文件不在索引中
  5. 新增Lucene50Codec編碼/解碼器,這就使得在索引合併時,減少了記憶體堆的使用,這是因為索引合併時,不是將所有的Field載入到堆中,而是先載入當前要合併Field,合併成功後再刪除,然後再載入其他Field
  6. 預設的Norms格式使用了稀疏編碼,這就意味著當進行搜尋時,具有大量稀疏Field的Norms將能夠大大減少堆大小的使用
  7. 該版本新增了用來列印一個樹形結構以遞迴展示索引過程中佔用堆大小的API
  8. FieldCache類已經不鼓勵使用,當要在某個Field上進行排序時,使用者應該使用Doc值來索引相應的Field,相對於使用FieldCache更加快且耗費較少的堆大小
  9. 新增一個基於跟蹤策略的過濾器快取,該快取能夠快取高頻率使用的過濾器
  10. 新增DateRangeField型別,該型別能夠索引和搜尋時間範圍、關於DateRangeField的多值
  11. 預設的編/解碼器新增了一個選項,以用來控制Filed的 BEST_SPEED或者BEST_COMPRESSION
  12. 用於基於多值Field排序的SortedSetSortField已從Lucene的沙箱中移到Luene的核心庫中。

Lucene 5.0已不再相容Lucene 3.X系列版本,當開啟3.X系列版本生成的索引將會引起格式異常。如果要升級到5.0版本,最好重建索引或者使用最新的4.10相關的索引工具更新舊的索引。

Lucene是一個使用Java開發的高效能的全文檢索引擎,更多關於Lucene 5.0的資訊,請讀者檢視其釋出公告和其完整改進列表請看ChangeLog。此外,基於Lucene的Solr也更新到了5.0版本,主要在易用性、維護操作、分散式叢集等方面進行了改進,讀者可以登入其官網瞭解相關資訊。目前,除了Solr外,還有有眾多著名的開源專案基於Lucene實現,如ElasticsearchHibernate Search、LinkedIn的Zoie。國內外許多公司都在使用Lucene或者基於Lucene的開源專案來構建全文檢索,如Apache軟體基金會的網站、Eclipse的幫助子系統等。

相關文章