lucene 从2.4.0—3.6.0—4.3.1版本升级—4.6.0版本升级

来源:互联网 发布:古典音乐软件安卓 编辑:程序博客网 时间:2024/05/20 18:20

一、从2.4升级到3.6

替换原因:由于使用IBM的jdk导致了查询出现不稳定现象,原因无法找到,只好升级版本,毕竟版本很低

1)替换中文分词器,由原来的MMAnaylze替换为IKAnaylze

2)将indexWriter中的相关配置封装到了IndexConfig对象中,在构造IndexWriter的对象时将配置对象传入即可,这样所有配置信息都封装到了配置对象,管理和维护都比较方便

3)optimize方法已经被废弃,3.6自身做了更好的优化

4)查询结果中对doc的对象中的索引项的值进行修改的方法进行了弃用,如doc.getField("content").setValue("testContent");

5)提供了批量索引操作和更新索引方法

6)主要类的构造中添加了版本号参数,如Version.Lucene_36


二、从3.6升级到4.3

1)optimize方法已经被删除

2)查询结果中对doc的对象中的索引项的值进行修改的方法进行了删除,使用迭代器进行修改其值

3)提供了批量索引操作和更新索引方法

4)主要类的构造中添加了版本号参数,如Version.Lucene_43

5)创建索引时,以前采用参数配置是否分词,现在采用StringField和TextField区分,前者不分词,后者分词,内部进行了优化

6)查询器对象IndexSearch不需要手动写代码close,组件自动处理

7)Directory类对象采用FSDirectory.open(new FIle("filePath"))来创建

8)不能使用如下api

doc.getField("content").setValue("test");

使用如下替代:

Iterator it = doc.iterator();

while(it.hasNext()) {

field = (Field) it.next();

if(field != null && key.equals(field.name) {

field.setStringValue(value);

break;

}

}

9)可以针对某个字段进行排序或过滤


三、从4.3.0到4.6.0升级

1、基本上api变化不大,对于IndexReader和IndexWriter只能new一次,重复new的话会报不能set两次的错误

2、Reader用完要关闭,不然再次创建索引时会多出一份索引文件,导致索引文件个数很多

3、创建索引不支持多线程,需要将synchronized进行控制

4、动态添加自定义字典,代码如下:

Dictionary dic = Dictionary.initial(DefaultConfig.getInstance());dic.disableWords(oldWordList);dic.addWords(newWordList);

5、循环创建索引时不能在中间将reader或writer关闭,否则报writer已关闭的异常








原创粉丝点击