Ich lerne die Hibernate Search Query-DSL , und ich bin nicht sicher, wie Abfragen mit boolean Argumenten zu konstruieren, wie AND oder OR.
Zum Beispiel, sagen wir mal, dass ich alle Person Datensätze zurückgeben möchten, die eine firstName
Wert von „Rechnung“ oder „bob“ haben.
Nach den Ruhezustand-Dokumenten, die ein Beispiel verwendet die bool () Methode w / zwei Unterabfragen, wie:
%Vor%Dies erzeugt letztlich die Lucene-Abfrage, die ich will, aber dann ist dies der richtige Weg, Boolesche Logik mit Hibernate Suche zu benutzen? Ist "soll ()" das Äquivalent von "ODER" (entspricht "muss ()" ebenfalls "UND") ?.
Auch das Schreiben einer Abfrage auf diese Weise ist mühsam. Zum Beispiel, was wäre, wenn ich eine Sammlung von FirstNames hätte, gegen die ich antreten könnte? Passt diese Art von Abfrage überhaupt zu der DSL?
Ja, Ihr Beispiel ist korrekt. Die booleschen Operatoren heißen sollte anstelle von OR wegen der Namen, die sie in der Lucene API und Dokumentation haben, und weil es passender ist: sie beeinflusst nicht nur einen booleschen Wert Entscheidung, aber es beeinflusst auch die Bewertung des Ergebnisses.
Wenn Sie zum Beispiel nach Autos der Marke "Fiat" oder "Blau" suchen, werden auch die Autos mit der Markenbezeichnung Fiat AND blue zurückgegeben und haben eine höhere Punktzahl als diejenigen, die blau, aber nicht Fiat sind.
Es könnte sich schwerfällig anfühlen, weil es programmatisch ist und viele detaillierte Optionen bietet. Eine einfachere Alternative besteht darin, eine einfache Zeichenfolge für Ihre Abfrage zu verwenden und den QueryParser zum Erstellen der Abfrage zu verwenden. Im Allgemeinen ist der Parser nützlich, um Benutzereingaben zu parsen, der programmatische ist leichter mit gut definierten Feldern umzugehen; Wenn Sie beispielsweise die von Ihnen erwähnte Sammlung haben, ist es einfach, sie in einer für Schleife zu erstellen.
Um Ihre sekundäre Frage zu beantworten:
Zum Beispiel, was wäre, wenn ich eine Sammlung von firstNames hätte, mit denen ich zusammenspielen könnte?
Ich bin kein Experte, aber laut (das dritte Beispiel vom Ende) 5.1.2.1. Keyword-Abfragen in Hibernate Search-Dokumentation , sollten Sie in der Lage sein, die Abfrage wie folgt zu erstellen:
%Vor% und hat als Ergebnis Person
s mit ( firstName
vorzugsweise "billy" oder "Bob") AND ( lastName
="thornton"), obwohl ich don‘ Ich denke, es wird dem guten alten Billy Bob Thornton eine höhere Punktzahl geben ;-).
Ja, Ihr Beispiel ist korrekt. Die booleschen Operatoren heißen sollte anstelle von OR wegen der Namen, die sie in der Lucene API und Dokumentation haben, und weil es passender ist: sie beeinflusst nicht nur einen booleschen Wert Entscheidung, aber es beeinflusst auch die Bewertung des Ergebnisses.
Wenn Sie zum Beispiel nach Autos der Marke "Fiat" oder "Blau" suchen, werden auch die Autos mit der Markenbezeichnung Fiat AND blue zurückgegeben und haben eine höhere Punktzahl als diejenigen, die blau, aber nicht Fiat sind.
Es könnte sich schwerfällig anfühlen, weil es programmatisch ist und viele detaillierte Optionen bietet. Eine einfachere Alternative besteht darin, eine einfache Zeichenfolge für Ihre Abfrage zu verwenden und den QueryParser zum Erstellen der Abfrage zu verwenden. Im Allgemeinen ist der Parser nützlich, um Benutzereingaben zu parsen, der programmatische ist leichter mit gut definierten Feldern umzugehen; Wenn Sie beispielsweise die von Ihnen erwähnte Sammlung haben, ist es einfach, sie in einer für Schleife zu erstellen.
Sie können auch BooleanQuery . Ich würde das vorziehen, weil Sie diese Schleife in einer Liste verwenden können.
%Vor%Ich habe nach dem gleichen Thema gesucht und ein etwas anderes Thema als präsentiert. Ich suchte nach einer tatsächlichen %code% -Kreuzung. Der Soll-Fall funktionierte für mich nicht, da Ergebnisse, die keinen der beiden Ausdrücke bestanden hatten, jedoch mit einem niedrigeren Ergebnis bestanden. Ich wollte diese Ergebnisse komplett weglassen. Sie können jedoch einen tatsächlichen booleschen OR-Ausdruck erstellen, indem Sie einen separaten booleschen Ausdruck verwenden, für den Sie die Bewertung deaktivieren:
%Vor%Um Ihre sekundäre Frage zu beantworten:
Zum Beispiel, was wäre, wenn ich eine Sammlung von firstNames hätte, mit denen ich zusammenspielen könnte?
Ich bin kein Experte, aber laut (das dritte Beispiel vom Ende) 5.1.2.1. Keyword-Abfragen in Hibernate Search-Dokumentation , sollten Sie in der Lage sein, die Abfrage wie folgt zu erstellen:
%Vor%und hat als Ergebnis %code% s mit ( %code% vorzugsweise "billy" oder "Bob") AND ( %code% ="thornton"), obwohl ich don‘ Ich denke, es wird dem guten alten Billy Bob Thornton eine höhere Punktzahl geben ;-).
Ich lerne die Hibernate Search Query-DSL , und ich bin nicht sicher, wie Abfragen mit boolean Argumenten zu konstruieren, wie AND oder OR.
Zum Beispiel, sagen wir mal, dass ich alle Person Datensätze zurückgeben möchten, die eine %code% Wert von „Rechnung“ oder „bob“ haben.
Nach den Ruhezustand-Dokumenten, die ein Beispiel verwendet die bool () Methode w / zwei Unterabfragen, wie:
%Vor%Dies erzeugt letztlich die Lucene-Abfrage, die ich will, aber dann ist dies der richtige Weg, Boolesche Logik mit Hibernate Suche zu benutzen? Ist "soll ()" das Äquivalent von "ODER" (entspricht "muss ()" ebenfalls "UND") ?.
Auch das Schreiben einer Abfrage auf diese Weise ist mühsam. Zum Beispiel, was wäre, wenn ich eine Sammlung von FirstNames hätte, gegen die ich antreten könnte? Passt diese Art von Abfrage überhaupt zu der DSL?
Ich habe nach dem gleichen Thema gesucht und ein etwas anderes Thema als präsentiert. Ich suchte nach einer tatsächlichen OR
-Kreuzung. Der Soll-Fall funktionierte für mich nicht, da Ergebnisse, die keinen der beiden Ausdrücke bestanden hatten, jedoch mit einem niedrigeren Ergebnis bestanden. Ich wollte diese Ergebnisse komplett weglassen. Sie können jedoch einen tatsächlichen booleschen OR-Ausdruck erstellen, indem Sie einen separaten booleschen Ausdruck verwenden, für den Sie die Bewertung deaktivieren:
Tags und Links java hibernate-search