Lucene 6.2.1入门教程(二) 添加索引时新API与旧API的一些不同之处

首先说一下,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中设置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值