首先说一下,lucene6.2.1和3.x版本的不同之处
Field.Index.Analyzed这个被取消了,实现方式也有了较大不同,Document对象添加Field时,如果添加的是StringField,则对该Field不进行索引分析,如果添加的是TextField,则对该Field进行索引分析。
IndexWriter.MaxFieldLength这个也被取消了,被一个过滤器LimitTokenCountFilter 替代。
Document加权被取消了,只剩下Field的加权。
写一些例子
Directory dir=new RAMDirectory();
StandardAnalyzer analyzer=new StandardAnalyzer();
IndexWriterConfig config=new IndexWriterConfig(analyzer);
try(IndexWriter writer=new IndexWriter(dir,config);){
Document doc=new Document();
String senderEmail="ccdust@126.com";
String senderName="Skywalker";
String subject="I am your father!";
String body="NOoooooooooo!";
doc.add(new Field("senderEmail",senderEmail,StringField.TYPE_STORED));
doc.add(new Field("senderName",senderName,TextField.TYPE_STORED));
doc.add(new Field("subject",subject,TextField.TYPE_STORED));
doc.add(new Field("body",body,TextField.TYPE_STORED));
String nbDomain="nb.com";
Field domainField=new Field("domain",nbDomain,TextField.TYPE_STORED);
domainField.setBoost(1.5F);
doc.add(domainField);
writer.addDocument(doc);
其中StringField和TextField分开使用,判断该域是否被索引分析。
LimitTokenCountFilter我还不会用。。。我是这么写的,反正不报错,但不确定对错,所以就不细说了
Analyzer analyzer=new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName) {
// TODO Auto-generated method stub
if(true){
Tokenizer tk=new StandardTokenizer();
LimitTokenCountFilter filter=new LimitTokenCountFilter(new StopFilter(new LowerCaseFilter(tk),new CharArraySet(StopAnalyzer.ENGLISH_STOP_WORDS_SET, true)),10);
return new TokenStreamComponents(tk, filter);
}
return null;
}
};
数值类型域的写入也有变化:
Directory dir=new RAMDirectory();
IndexWriterConfig conf=new IndexWriterConfig();
conf.setInfoStream(System.out);
IndexWriter writer=new IndexWriter(dir, conf);
Document doc=new Document();
doc.add(new LongPoint("timestamp", new Date().getTime()));
doc.add(new IntPoint("days",3));
doc.add(new DoublePoint("price",5.4));
writer.addDocument(doc);
LongPoint、IntPoint和DoublePoint是三种基本数据类型的域类型,对应的是某一数值的域,还有对应某一数组区间的域类型,它们是LongRangeField、IntRangeField和DoubleRangeField。
InfoStream的设置方式也有了变化,变成了在IndexWriterConfig中设置。