lucene范围查询

lucene 范围查询


  • NumericRangeQuery
    索引时,将数值按位切分为多个不同步长(不同精度)的域,不同步长的域分别建索引,查询时,也将查询的范围值按照多个步长划分到不同步长的域上查询,这样能减少查询的term的数量。
  • FieldCacheRangeFilter
    使用lucene的FieldCache,即将字段值用大数组缓存起来,数组下标是docid,值是字段值,查询时,进行过滤。该方式一般情况下比NumericRangeQuery快(在其他查询条件命中数较少时,即过滤次数少时,比NumericRangeQuery要快),但会占用很大的内存。如果该字段还负责按值排序的需求,则可考虑这种方式,因为排序也需要值缓存,在上面进行范围查询就没有带来额外的开销了。
  • 范围查询优化
    结合以上两种方式的优缺点,可以考虑一种改进的办法:将NumericRangeQuery的低精度的term缓存起来,而高精度的term实时查询,然后构造Filter,过滤出范围内的记录。

相关推荐