我已经和卢克一起打开了索引,字段就在那里。
该字段通过HibernateSearch进行索引,并按如下方式进行注解:
@Field(name = "id", index = Index.YES, analyze = Analyze.NO, store = Store.NO)
Long id
此字段的值介于109和185之间。如果我搜索此字段,例如:[150至180]则未找到任何内容。
如果我使用以下内容搜索它:[0 TO 1],则返回所有结果。似乎该字段的索引格式错误,对吗?如何更正?
请注意,我也用store = Store.YES索引了一次,以便在Luke中看到这些值,并且可以正确地看到它们。
2条答案
按热度按时间b09cbbtk1#
Lucene中的查询解析器会将所有内容都视为字符串。这是有意义的:在查询时Lucene并不知道使用了哪些类型,这意味着它们将创建字符串范围查询。
因此,如果你想让Lucene创建一个合适的数值范围查询,你需要子类化
MultiFieldsQueryParser
(假设你使用了它)并覆盖newRangeQuery
。在那里,你可以检查字段名,如果你知道它是一个数值字段,你可以创建一个范围查询(例如,使用LongPoint.newRangeQuery()
)。anauzrmj2#
我现在发现我必须使用
NumericRangeQuery.newLongRange()