Ich arbeite an einer solr-Abfrage ähnlich der folgenden:
((myField:superneat AND myOtherField:somethingElse) OR NOT myField:superneat)
Wenn Sie dies ausführen, werden keine Ergebnisse zurückgegeben. Die Verwendung von Kriterien auf beiden Seiten von OR NOT liefert die erwarteten Ergebnisse - sie arbeiten einfach nicht gut zusammen. Für den Fall, dass myField mit Superneat übereinstimmt , möchte ich auch sicherstellen, dass myOtherField auf etwas anderes eingestellt ist. Wenn myField jedoch nicht Superteat ist , nehmen Sie es in die Ergebnisse auf.
Kann jemand erklären, warum solr für diese Art von Abfrage keine Ergebnisse zurückgibt? Sollte die Abfrage irgendwie umstrukturiert werden - oder gibt es eine andere Art und Weise, wie solr verwendet werden kann, um das gewünschte Ergebnis zu erzielen?
-myField:superneat OR myOtherField:somethingElse
dies auch gleich wäre und etwas einfacher ist.quelle
Solr sucht derzeit nach einer "rein negativen" Abfrage und fügt sie ein
*:*
(was mit allen Dokumenten übereinstimmt), damit sie ordnungsgemäß funktioniert.-foo
wird von solr in umgewandelt(*:* -foo)
Die große Einschränkung ist, dass Solr nur prüft, ob die Abfrage der obersten Ebene eine rein negative Abfrage ist! Dies bedeutet also, dass eine Abfrage wie
bar OR (-foo)
nicht geändert wird, da sich die reine negative Abfrage in einem Unterabschnitt der Abfrage der obersten Ebene befindet. Sie müssen diese Abfrage selbst in transformierenbar OR (*:* -foo)
Sie können die Erklärung der solr-Abfrage überprüfen, um die Abfragetransformation zu überprüfen:
verwandelt sich in
quelle
Beim Zusammenstellen von Kommentaren aus verschiedenen Antworten hier, in den Solr-Dokumenten und bei der anderen SO-Frage stellte ich fest, dass die folgende Syntax das richtige Ergebnis für meinen Anwendungsfall liefert
(my_field = my_value oder my_field ist null):
Dies funktioniert für Solr 4.1.0. Dies unterscheidet sich geringfügig vom Anwendungsfall im OP. aber ich dachte, dass andere es nützlich finden würden.
quelle
Das Follow-up zur Solr-User-Gruppe finden Sie unter: Solr User Mailling List
Der vorherrschende Gedanke ist, dass der Operator NOT nur zum Entfernen von Ergebnissen aus einer Abfrage verwendet werden darf - und nicht nur Dinge aus dem gesamten Datensatz ausschließt. Ich mag zufällig die Syntax, die Sie mausch vorgeschlagen haben - danke!
quelle
Um einen weiteren unerwarteten Fall hinzuzufügen, folgt eine Abfrage, die keine erwarteten Ergebnisse zurückgibt:
field_b
In meinem Fall führe ich Facettierungen durch und musste den Abfragebegriff "foo" nur auf diesen Typ (Balken) ausrichten.Ich musste nach der oder Bedingung eine weitere einfügen
*:*
, damit dies funktioniert:edit: das ist in solr 6.6.3
quelle
einfach do id :( "12345") ODER id :( "7890") .... und so weiter
quelle