一、从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已关闭的异常