ich ein Feld wie folgt definiert:NumericRangeQuery nicht für int Feld in Hibernate Search
@Column(name = "clip_segments")
@Field(store = Store.YES)
public long getClipSegments() {
return clipSegments;
}
Und ich wollte ein NumericRangeQuery es, anzuwenden, wenn für Objekte sucht (Rückkehr alle Objekte mit dem Feldwert> 0) :
org.apache.lucene.search.Query onlyCompilableQuery = NumericRangeQuery
.newIntRange("clipSegments", 0, Integer.MAX_VALUE, false,
false);
dies ist jedoch immer versagt, dh es werden keine Ergebnisse zurückgegeben werden. Ich habe den Index mit Luke untersucht und kann sehen, dass die Felder numerisch kommentiert sind und unterschiedliche Werte haben.
Ich versuchte mehrere Möglichkeiten, aber immer mit den gleichen Ergebnissen. Letztlich entschied ich die IntegerBridge zu verwenden:
@Column(name = "clip_segments")
@Field(store = Store.YES)
@FieldBridge(impl = IntegerBridge.class)
public long getClipSegments() {
return clipSegments;
}
Und eine einfache Stichwortsuche auf dem Feld verwenden:
org.apache.lucene.search.Query onlyCompilableQuery = qb.keyword()
.onFields("clipSegments").matching("0")
.createQuery();
Und das funktioniert, wenn ich einen BooleanJunction mit .not() auf der Abfrage zu tun Holen Sie alle Objekte mit dem Zeichenfolgenfeld anders als "0".
Ich verstehe nicht, was ich falsch mit dem NumericField mache. Jede Hilfe wird geschätzt.
Auch, ist die Leistung viel besser mit der NumericRangeQuery?
Ja, offensichtlich sind Sie direkt auf der Long/Integer Front. Ich habe 'über (0)' vor NumericRangeQuery versucht, aber es gab auch nicht die Ergebnisse sind aus genau dem gleichen Grund gesucht. Der Weg dazu ist mit "über (neu lang (0))" oder "über (0L)", um sicherzustellen, dass es ein Long ist, kein Integer. – PawelPredki
Das ist was ich geschrieben habe, nur mit einem Kleinbuchstaben l;) –
Ich bin blind, Entschuldigung :) Es schmolz mit den Klammern in meinen Augen ... – PawelPredki