lucene不同版本的差别与比较
2007-03-30 20:36
369 查看
将以前开发的项目中的lucene从1.4.3升级到2.1,发现编译就不通过,于是对照新的API将程序做了修改,目前本人遇到的API更改有
1. IndexReader类
delete(int id)方法改名为deleteDocuemnt(int id), delete(Term t) 方法改名为deleteDocuments(Term t);
getFieldNames()方法现在必须传入参数了,类型是IndexReader.FieldOption,例如
Collection c=reader.getFieldNames(IndexReader.FieldOption.ALL);
2. Field类
构造函数Field(String name,String value,boolean store,boolean index,....)不复存在,变成了更加
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)
相应的Field.Keyword静态方法也没有了,必须采用构造函数直接生成实例;
3. BooleanQuery
add方法也改了,原有的是add(Query q, boolean required, boolean prohibited)现在也更加面向对象了:
add(Query q, BooleanClause.Occur occur);
4.BooleanClause
其query属性不是public的了,需要使用getQuery()方法获取;
4. IndexWriter
mergeFactor属性不再是public的了,有了个setMergeFactor()方法;
5. DateField
deprecated了,使用DateTools;
6.QueryParser
parse方法不再是static的了,也就是要先取得QueryParser 的实例再调用实例的parse()方法。这样就可以继承QueryParser 写一个自己的检索式解析器了。我写了一个来解决做模糊检索时出现TooManyClauses 异常的问题。主要是利用Filter的机制来实现。但实际运行过程中只能解决PrefixQuery的问题,即title:comput*样式的检索式没有问题(星号在最后),而在做WildcardQuery时即检索式样式是title:com*er时速度非常慢(数据量4000万),于是只好在新的解析器中只重写了getPrefixQuery()方法。
7. Luke
Luke工具读2.0的索引不太好用了,在其官方网站上还没有支持2.0的版本,于是下了源代码针对2.0的接口重新编译了一下,做了一些修改。可以从这里下载:
2.0以前的版本
Keyword: Field的值将被保存到索引文件,为Field的值建立索引,建立索引时不需要分词。
UnIndexed: Field的值将被保存到索引文件,不为Field的值建立索引,因此不能通过该Field搜索文档。
UnStored: Field的值不被保存到索引文件,将Field的值分词后建立索引
Text: Field的值分词后建立索引。如果参数为String值将被保存,为Reader值不被保存
2.0版本
用几个内部类的组合来区分Field的具体类型。
Store
COMPRESS:压缩保存。用于长文本或二进制数据 YES:保存 NO:不保存
Index
NO:不建索引 TOKENIZED:分词,建索引 UN_TOKENIZED:不分词,建索引 NO_NORMS:不分词,建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
TermVector
NO:不保存term vectors YES:保存term vectors。 WITH_POSITIONS:保存term vectors。(保存值和token位置信息) WITH_OFFSETS:保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)
1. IndexReader类
delete(int id)方法改名为deleteDocuemnt(int id), delete(Term t) 方法改名为deleteDocuments(Term t);
getFieldNames()方法现在必须传入参数了,类型是IndexReader.FieldOption,例如
Collection c=reader.getFieldNames(IndexReader.FieldOption.ALL);
2. Field类
构造函数Field(String name,String value,boolean store,boolean index,....)不复存在,变成了更加
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)
相应的Field.Keyword静态方法也没有了,必须采用构造函数直接生成实例;
3. BooleanQuery
add方法也改了,原有的是add(Query q, boolean required, boolean prohibited)现在也更加面向对象了:
add(Query q, BooleanClause.Occur occur);
4.BooleanClause
其query属性不是public的了,需要使用getQuery()方法获取;
4. IndexWriter
mergeFactor属性不再是public的了,有了个setMergeFactor()方法;
5. DateField
deprecated了,使用DateTools;
6.QueryParser
parse方法不再是static的了,也就是要先取得QueryParser 的实例再调用实例的parse()方法。这样就可以继承QueryParser 写一个自己的检索式解析器了。我写了一个来解决做模糊检索时出现TooManyClauses 异常的问题。主要是利用Filter的机制来实现。但实际运行过程中只能解决PrefixQuery的问题,即title:comput*样式的检索式没有问题(星号在最后),而在做WildcardQuery时即检索式样式是title:com*er时速度非常慢(数据量4000万),于是只好在新的解析器中只重写了getPrefixQuery()方法。
7. Luke
Luke工具读2.0的索引不太好用了,在其官方网站上还没有支持2.0的版本,于是下了源代码针对2.0的接口重新编译了一下,做了一些修改。可以从这里下载:
2.0以前的版本
Keyword: Field的值将被保存到索引文件,为Field的值建立索引,建立索引时不需要分词。
UnIndexed: Field的值将被保存到索引文件,不为Field的值建立索引,因此不能通过该Field搜索文档。
UnStored: Field的值不被保存到索引文件,将Field的值分词后建立索引
Text: Field的值分词后建立索引。如果参数为String值将被保存,为Reader值不被保存
2.0版本
用几个内部类的组合来区分Field的具体类型。
Store
COMPRESS:压缩保存。用于长文本或二进制数据 YES:保存 NO:不保存
Index
NO:不建索引 TOKENIZED:分词,建索引 UN_TOKENIZED:不分词,建索引 NO_NORMS:不分词,建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
TermVector
NO:不保存term vectors YES:保存term vectors。 WITH_POSITIONS:保存term vectors。(保存值和token位置信息) WITH_OFFSETS:保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)
相关文章推荐
- 西门子PLC200不同版本的串口性能比较
- git 比较不同版本文件的差异
- 西门子PLC200不同版本的串口性能比较
- mysql性能测试及不同版本的比较
- 如何比较两个EXCEL 文件的不同(各个EXCEL版本的方法)
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
- Lucene field类 1.版本和2.版本比较
- Hyper-V 2016 系列教程22 比较 Windows Server 2016 服务器不同版本的特征
- 机器学习(10.1)--手写数字识别的不同算法比较(1)--mnist数据集不同版本解析及平均灰度实践
- 比较同一数据库不同版本间数据表之间差异
- MySQL不同版本间的性能比较
- svn中比较两个版本之间的差别
- 西门子PLC200不同版本的串口性能比较
- mysql性能测试及不同版本的比较
- 比较同一数据库不同版本间数据表之间差异
- Git diff 比较不同版本的差异
- SharePoint: 如何比较文档的不同版本
- Lucene field类 1.版本和2.版本比较
- 利用eclipse比较两个文件的代码差异或者一个文件不同版本之间的异同
- git 比较同一文件的不同的两个版本之间的差异