Weird Solr / Lucene Verhalten mit booleschen Operatoren

8

Ich stoße auf ein merkwürdiges Verhalten mit - Operatoren in der Solr / Lucene-Abfragesyntax. Wenn ich die Abfrage

ausführe %Vor%

Ich bekomme alle erwarteten Ergebnisse (Lot), aber wenn ich Klammern wie

setze %Vor%

oder

%Vor%

Dann bekomme ich überhaupt keine Ergebnisse. Ich kann nicht verstehen warum. Haben Sie eine Erklärung für dieses Verhalten?

Vielen Dank im Voraus.

    
Nicolò Martini 09.09.2011, 15:15
quelle

2 Antworten

10

Die Frage wurde in. sehr gut beantwortet Solr-Mailingliste . Sie haben auch einen Eintrag in der offiziellen FAQ hinzugefügt, der besagt:

  

Boolesche Abfragen müssen mindestens einen "positiven" Ausdruck haben (dh; MUST oder SOLL), damit sie übereinstimmen. Solr versucht, dabei zu helfen, und wenn er aufgefordert wird, eine BooleanQuery auszuführen, die nur negative Klauseln auf der obersten Ebene enthält, fügt es eine Übereinstimmung mit allen Dokumentenabfragen hinzu (zB: *: *)

     

Wenn die BoolenQuery der obersten Ebene irgendwo eine verschachtelte BooleanQuery enthält, die nur negierte Klauseln enthält, wird diese verschachtelte Abfrage nicht geändert und entspricht (per Definition) keinem Dokument - falls erforderlich bedeutet, dass die äußere Abfrage nicht übereinstimmt.

So geben Ausdrücke mit nur "negativen" Werten immer 0 Ergebnisse zurück, außer auf der obersten Ebene, wo der Parser automatisch ein *:* am Anfang der Abfrage hinzufügt.

Daher wird -text AND -text in *:* -text AND -text umgewandelt und hat somit Ergebnisse (-text) wird nicht in (*:* -text) umgewandelt, da es nicht auf der obersten Ebene liegt, und daher liefert (-text) keine Ergebnisse.

    
Nicolò Martini 14.09.2011, 07:33
quelle
1

Die Erklärung hängt von der verwendeten Suchroutine und der gesamten Abfragezeichenfolge ab.

Zum Beispiel: Sie können nach mehreren Feldern suchen, wie

text AND text & lt; - die in allen (Standard) Feldern gesucht hat - abhängig vom Such-Handler

FIELD1:text AND text & lt; - die AND verwendet, um in FIELD1

zu suchen

FIELD1:text1 AND (-text2) & lt; - sucht (wie ich mich recht erinnere) nach text1 in FIELD1 AND NOT text2 in allen anderen (Standard) Dokumenten - abhängig vom Such-Handler.

Ich denke, die Verwendung von () ändert den Umfang / die Felder der Suche.

Vielleicht muss das Verhalten, das Sie beschreiben, mit so etwas zu tun haben?!

    
The Bndr 09.09.2011 15:23
quelle

Tags und Links