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