lucene2.0与2.3区别

有谁对lucene2.0与2.3做出过些比较么?
在做一个搜索的项目,本来打算用的是2.0。看到现在的最新版本是2.3的了,
  在网上查了下2.3的一些优点大概就以下几点:
  1、Improved Index Management(索引管理的改进),在以前版本的索引过程中,如果Index比较large,Index-merge需要消耗大量的资源,费时,产生delay现象,2.3基本避免了。
 2、 Object Pool(对象池),Document、Field、Token的instance可以在Indexing过程中reuse,因此大幅提升了分析速度,减 少了内存分配次数。说明:类似于java中的Database Connection Pool,可重用,降低数据库连接次数。
 3、Reopen IndexReader(重新打开IndexReader),IndexReader类的reopen方法只捕捉索引中变更过的细小Index Segment,而不是重新加载完整的索引。
 4、IndexWriter 调整,原来的setMaxBufferedDocs被setRAMBufferSizeMb所取代。
 请问除了上面的这些改进还有哪些大的不同没?


我收集的。。。有点乱
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 G

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() 方法将内存的内容刷新到文件系统。

在《实战 Lucene,第 1 部分: 初识 Lucene》和 idior 大哥的是理论代码中:

document.add(Field.Text("path",dataFiles[i].getCanonicalPath()));
document.add(Field.Text("contents",txtReader));

而在lucene2.2.0中已经改变了,如下:
doc.add(new Field("path",dataFile.getCanonicalPath(),Field.Store.YES,Field.Index.UN_TOKENIZED));
doc.add(new Field("contents",txtReader));

Field需要新建一个实例,而不是静态调用了。nce可以在Indexing过程中reuse,因此大幅提升了分析速度,减少了内存分配次数。说明:类似于java中的Database Connection Pool,可重用,降低数据库连接次数。
词条载荷(payloads)——允许用户将任意二进制数据和索引中的任意词条(term)相关联;
函数查询(function queries)——为文档匹配度(score)的计算方式提供更高的可控性(从Solr中并入); 
通过NFS进行“瞬间(point-in-time)”查询——将类似于快照的功能引入NFS;
用来操作预分析字段的新API——可以让用户操作预先分析的文档字段而无须另加空分析器代码;
公开的Maven发行版——Lucene最新版本中的所有模块都可以通过Maven Repository获得。

1、Improved Index Management(索引管理的改进),在以前版本的索引过程中,如果Index比较large,Index-merge需要消耗大量的资源,费时,产生delay现象,2.3基本避免了。

2、Object Pool(对象池),Document、Field、Token的instaA.

3、Reopen IndexReader(重新打开IndexReader),IndexReader类的reopen方法只捕捉索引中变更过的细小Index Segment,而不是重新加载完整的索引。

4、IndexWriter 调整,原来的setMaxBufferedDocs被setRAMBufferSizeMb所取代。

lucene的下一个版本不是2.4,而是2.9,2.9中将做很小的改动,为向3.0过渡做一些衔接工作,3.0的改动将会很大,代码库将迁移到jdk5.0,这也促使java development向jdk5.0迁移,虽然是向下兼容的,你的项目仍需要做细微改动。

lucene 和企业级搜索应用服务器Solr关系很紧密,与Nutch(开源java搜索引擎,包含full-text index和spider)、Tika(一个工具包,可使用语法分析器从结构化的文档中解析元数据)、Hadoop(类似Google架构的开源项目)的 communication也非常流畅,将这些好东东综合起来,肯定能部署大型、分布式的search engine应用

你可能感兴趣的:(Lucene)