从Lucene 1.4.3升级到2.0实践

将以前开发的项目中的lucene从1.4.3升级到2.0,发现编译就不通过,于是对照新的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的接口重新编译了一下,做了一些修改。可以从这里下载:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值