lucene6.0+数值型字段排序与范围查询


在使用lucene进行建立索引搜索时,排序与范围查询常会使用到数值型字段,int、long、float等,lucene在6.0版本后很多老的api被删除,启用了很多新的处理api,对于数值型字段多了新的处理,原来lucene对于数值型字段还是相对较弱的。
lucene主要是采用倒排索引的形式进行建立索引进行查询的,通过term到doc映射达到快速索引的目的,但是在排序、高亮、统计时这种方式也并不高效,所以后来lucene加入了docvalue特性,可以把这个特性理解为正排索引。在构建索引时如果开启了这一特性会额外建立一个字段级别的排序好的文档索引,实现磁盘空间换内存,加速功能实现。具体关于docvalue 的介绍可参考:
以前使用solr时,关于字段的设置都是在xml文件中完成,现在使用lucene的api后需要自己实现,首先建立索引时的逻辑:
//浮点型
doc.add(new FloatPoint("duration", 2.51f));//倒排索引
doc.add(new FloatDocValuesField("duration", 2.51f));//正派索引用于排序、聚合
doc.add(new StoredField("duration", 2.51f));//需要存储

//整型		
doc.add(new LongPoint("size", 515));//倒排索引
doc.add(new NumericDocValuesField("size", 515));//正派索引用于排序、聚合
doc.add(new StoredField("size", 515));//需要存储
         6.0后的版本,数值型建立索引的字段都更改为Point结尾,FloatPoint,LongPoint,DoublePoint等,对于浮点型的docvalue是对应的 DocValuesField,整型为 NumericDocValuesField, FloatDocValuesField等都为NumericDocValuesField的实现类。

在进行检索时,需要进行排序时:
//true为倒序
Sort sort = new Sort(new SortField("duration",SortField.Type.FLOAT,true));
TopDocs docs = searcher.search(query, 10,sort);
范围查询:
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(FloatPoint.newRangeQuery("duration", 0f, 3f),Occur.SHOULD);
Sort sort = new Sort(new SortField("duration",SortField.Type.FLOAT,true));
TopDocs docs = searcher.search(builder.build(), 10,sort);
具体测试用例没有给出,这里只介绍具体使用的字段及设置。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值