Lucene6入门教程(五)版本改变

释放双眼,带上耳机,听听看~!

版本变化:
IndexWriterConfig 类的构造方法;
Directory类的生成方法 FSDirectory.open(),(Path,File);
Field类中的存储问题,Intpoint取代IntField;
BooleanQuery() 的构造方法改变;
PointValues 取代了NumericField,.legacyXXField废弃;
WhitespaceAnalyzer类的废弃;
现在,Luene已经是6.6版本了,与之前的2.9,3.5,4.5,5等各个版本,已经很有些不同了。学习4.0之前的教程,我可是吃过不少亏的。
具体变化:
(1)IndexWriterConfig 类的构造方法:
这个类主要是充当创造/在索引过程中更新指标的对象。
原来Lucene4.0之前


1
2
3
4
1writer = new IndexWriter(indexDirectory,
2             new StandardAnalyzer(Version.LUCENE_36),true,
3                    IndexWriter.MaxFieldLength.UNLIMITED);
4

现在Lucene6


1
2
3
4
1Analyzer analyzer=new StandardAnalyzer();
2       IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
3        IndexWriter writer = new IndexWriter(dir, iwc);
4

(2)Directory类的生成方法 FSDirectory.open(),(Path,File);
这个类主要便是打开词盘中的文件,
原来Lucene4.0之前


1
2
1Directory directory = FSDirectory.open(new File(“C:\”));
2

现在Lucene6


1
2
1Directory directory = FSDirectory.open(Path.get(“C:\”));
2

(3)Field类中的存储问题,Intpoint取代IntField;
原来的IntField类主要是实现整形的域内操作,而现在它主要改为Intpoint了,
原来Lucene用


1
2
3
1import org.apache.lucene.document.IntField;
2            document.add(new IntField("id", id[i], Field.Store.YES));
3

现在Lucene6用,需要配合StoredField来存储,需要NumericDocValuesField和StoredField来排序


1
2
3
4
5
1import org.apache.lucene.document.IntPoint;
2            doc.add(new NumericDocValuesField("id", id[i]));//和下边排序
3            doc.add(new IntPoint("id", id[i]));
4            doc.add(new StoredField("id", id[i]));  //存储
5

(4)BooleanQuery() 的构造方法改变;
BooleanQuery()的作用范围是 private 的,只能在类的内部调用,最大的改变是多出了静态内部类 Builder ,加强了类自身的稳定性与安全性。
原来Lucene用


1
2
3
4
5
1BooleanQuery query = new BooleanQuery();
2       for (Query subQuery : querys) {
3             query.add(subQuery,Occur.SHOULD);
4           } return query;
5

现在Lucene6用


1
2
3
4
1for (Query subQuery : querys) {
2        new BooleanQuery.Builder().add(subQuery,Occur.SHOULD).build();
3          }  return query;
4

(5)PointValues 取代了NumericField,.legacyXXField废弃
PointValues 更快,更小,更便于资源的利用,都被取代了legacy**,
原来Lucene


1
2
3
4
5
1document.add(new IntField("mouths", 1));
2            writer.addDocument(document);
3Query query = new NumericRangeQuery("mouths", 1, 8,false,false);
4TopDocs docs = searcher.search(query, ...);
5

现在Lucene6


1
2
3
4
5
1document.add(new IntPoint("mouths", 1));
2       writer.addDocument(document);
3Query query = IntPoint.newRangeQuery("mouths", 1, 8);
4TopDocs docs = searcher.search(query, ...);
5

(6)WhitespaceAnalyzer类的废弃;

参考:lucene6.6学习心得 http://www.voidcn.com/article/p-niqkzzcc-bmq.html

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索