我定義的字段,如下所示: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