Lucene:数字字段上的非范围查询

时间:2012-01-07 07:28:09

标签: lucene

我们目前正在使用lucene 2.3.2。我们使用前导零和索引填充整数,以便我们也可以支持范围查询。我们正在努力升级到lucene 3.4,并希望使用NumericRangeQueries。我们还希望支持数字字段的非范围查询。有没有办法在lucene中使用数字字段并支持列表类型的查询。

request_id:(123, 124, 253)

我知道上面的查询可以翻译成

request_id:[123 TO 123] OR request_id:[124 TO 124] OR request_id:[253 TO 253]

但是当用户提供一个巨大的列表时,查询将会太长。有没有办法充分利用这两种方法? (从索引作为数字字段和支持列表查询而不将这些查询转换为伪范围查询的范围查询的性能优势)

1 个答案:

答案 0 :(得分:0)

您似乎必须使用org.apache.lucene.util.NumericUtils来完成此操作,例如:

new TermQuery(new Term("field",
NumericUtils.intToPrefixCoded(myInt)));

虽然根据我的理解,它应该被优化以处理具有相等最小值和最大值的范围查询,因此您提供的示例查询不应该产生比此处示例更多的开销。