1.9 2.0 的改動不是很多,主要是廢棄了一些 API 2.0 起了一個過渡的作用。

2.1 是在 2.0 基礎上做了很多的改進,提升了性能,修復了一些 Bug 等。

?

Lucene2.1 在索引的格式上做了一些改進,所以舊版本的 Lucene 是無法訪問 2.1 版的索引文件。但是 2.1 版本的可以讀寫舊版本的索引文件。保持向下的兼容性。這點需要我們在使用時注意。

?

下面簡單的列出一些新的特性:

1.?????? 's' 't' 從默認的 stopwords 中移掉了。但是依然還有 'a' 也可以會有同樣的問題,所以分詞需要針對自己的應用進行自定義。

2.?????? 更新了 StandardAnalyzer 中的針對 CJK Unicode 代碼范圍。用處不大,因為我們中文需要自己開發分詞。

3.?????? 允許在 QueryParser 的最前面使用通配符 (*, ?) ,之前是不允許的。這個比較有意義,可以實現一些模糊搜索。

4.?????? QueryParser 默認使用 ConstantScoreRangeQuery 執行范圍查詢。增加了 useOldRangeQuery 屬性允許在需要的情況下使用舊的 RangeQuery

5.?????? 對于 WildcardQuery ,如果一個 term 不包含任何的 ? 或者 * ,之前會拋出異常,現在會執行一個 TermQuery

6.?????? 去掉了 deprecated doc.fields() 方法和 Enumeration

7.?????? write lock 現在默認的位置是索引的目錄,簡單命名為 write.lock

8.?????? 新的 FieldSelector API ,相關的 IndexReader 和實現都發生了變化。新的 Fieldable 接口被用作字段的延遲加載上。

9.?????? 使用 MultiFieldQueryParser 的時候可以為不同的 field 指定不同的 boosts

10.?? 新的方法 IndexWriter.addIndexesNoOptimize() 在新添加一個新的 segments 的時候,只進行合并,不進行優化。

11.?? QueryParser 允許在引號和短語中使用反斜線

12.?? 增加了方法 RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes() IndexWriter.flushRamSegments() ,允許應用程序控制索引時緩存文檔對內存的使用,這些蠻有用的,可以用于監控索引的過程。

13.?? QueryParser 解析 *:* 為匹配所有的內容

14.?? 可以通過命令行在已經存在的索引文件中修改和刪除 field

15.?? IndexWriter 增加了方法來高效得更新 documents 。增加 IndexWriter.flush() 方法將內存的內容刷新到文件系統。

??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 小兵 2007-3-22