Hibernate Search 中的 int 字段的 NumericRangeQuery 失败
NumericRangeQuery fails for int field in Hibernate Search
我定义了一个字段如下:
@Column(name = "clip_segments")
@Field(store = Store.YES)
public long getClipSegments() {
return clipSegments;
}
我想在搜索对象(return 字段值 > 0 的所有对象)时对其应用 NumericRangeQuery:
org.apache.lucene.search.Query onlyCompilableQuery = NumericRangeQuery
.newIntRange("clipSegments", 0, Integer.MAX_VALUE, false,
false);
然而,这总是失败,即没有结果 returned。我和 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 的性能是否更好?
我并不感到惊讶,整数和长整数在 Lucene 索引中的编码方式不同。
尝试使用 NumericRangeQuery.newLongRange 而不是 newIntRange。
也就是说,您应该使用 DSL,它会为您完成工作并避免这些错误。有关示例,请参阅 http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#_range_queries。
你有一个 below() 的例子,在你的情况下,你应该只使用 above(0l)。
我定义了一个字段如下:
@Column(name = "clip_segments")
@Field(store = Store.YES)
public long getClipSegments() {
return clipSegments;
}
我想在搜索对象(return 字段值 > 0 的所有对象)时对其应用 NumericRangeQuery:
org.apache.lucene.search.Query onlyCompilableQuery = NumericRangeQuery
.newIntRange("clipSegments", 0, Integer.MAX_VALUE, false,
false);
然而,这总是失败,即没有结果 returned。我和 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 的性能是否更好?
我并不感到惊讶,整数和长整数在 Lucene 索引中的编码方式不同。
尝试使用 NumericRangeQuery.newLongRange 而不是 newIntRange。
也就是说,您应该使用 DSL,它会为您完成工作并避免这些错误。有关示例,请参阅 http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#_range_queries。
你有一个 below() 的例子,在你的情况下,你应该只使用 above(0l)。