我定义的字段,如下所示:NumericRangeQuery未能在Hibernate Search的
@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();
和()这个作品,如果我做了BooleanJunction用。不上查询获取字符串字段与“0”不同的所有对象。
我不明白我在做什么错误的NumericField。任何帮助表示赞赏。
另外,使用NumericRangeQuery的性能会更好吗?
是的,很显然,你是正确的长/整数正面。我在NumericRangeQuery之前尝试了'above(0)',但它也没有返回结果,因为完全相同的原因。做到这一点的方法是用'above(new Long(0))'或'above(0L)'来确保它是一个Long not一个整数。 – PawelPredki
这就是我写的,只是一个小写的l;) –
我是盲人,对不起:)它融化在我眼中的圆括号中... – PawelPredki