我定义了一个字段如下:
@Column(name = "clip_segments")
@Field(store = Store.YES)
public long getClipSegments() {
return clipSegments;
}
我想在搜索对象时使用NumericRangeQuery(返回字段值> 0的所有对象):
org.apache.lucene.search.Query onlyCompilableQuery = NumericRangeQuery
.newIntRange("clipSegments", 0, Integer.MAX_VALUE, false,
false);
然而,这总是失败,即没有返回结果。我用Luke检查了索引,我可以看到这些字段被注释为数字,它们有不同的值。
我尝试了几种方法,但总是得到相同的结果。最终,我决定使用IntegerBridge:
@Column(name = "clip_segments")
@Field(store = Store.YES)
@FieldBridge(impl = IntegerBridge.class)
public long getClipSegments() {
return clipSegments;
}
在字段上使用简单的关键字搜索:
org.apache.lucene.search.Query onlyCompilableQuery = qb.keyword()
.onFields("clipSegments").matching("0")
.createQuery();
如果我在查询中使用.not()执行BooleanJunction以获取字符串字段不同于“0”的所有对象,则此方法有效。
我不明白我在NumericField上做错了什么。任何帮助表示赞赏。
另外,使用NumericRangeQuery会更好吗?
答案 0 :(得分:2)
我并不感到惊讶,整数和长期在Lucene指数中的编码方式不同。
尝试使用NumericRangeQuery.newLongRange而不是newIntRange。
话虽这么说,你应该使用能够为你完成工作的DSL并避免这些错误。有关示例,请参阅http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#_range_queries。
你有一个下面的例子(),在你的情况下,你应该只使用上面的(0l)。