[lucene那点事儿]继承RangeFilter编写数字型过滤器

Lucene提供了多种针对于区间的查询的实现方式,诸如RangeQuery和RangeFilter等,通常而言,RangeQuery是最容易联想的方式,使用起来很非常的简单,但是,使用它却很容易出现TooManyClause exception,我在另一篇文章

http://blog.csdn.net/quzishen/archive/2010/08/17/5818068.aspx 已经讲述了出现这个问题的原因。而且,这种方式很容易造成内存溢出,使系统的运行受到严重影响。

所以推荐的,是使用RangeFilter,装配进Query中进行过滤。Lucene提供的RangeFilter的过滤机制是通过对比字符来进行的,比如搜索a - e 之间的字符的方式,这样就很容出现搜索 1 - 5,却能将 200 搜出来的原因。是因为 字符'2' 处于 '1' 和 '5' 之间。

所以如果希望能够正确的过滤数字型的数据,需要我们特殊处理。这里我提出一种方案:

继承RangeFilter编写自己的数字型过滤器,看看源代码:

 

这样就实现了数字型数据的过滤。看看如何使用(为了对比,我将另一种采用QueryRange的方式也写入了并注释掉)

先判断当前的数据是否是数字型的,如果非数字型,则使用Lucene的RangeFilter。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值