Ihre Syntax ist richtig, aber was Sie für die Frage ist nicht, welche Textfelder aus zum. Ein Textfeld wird in Token aufgeteilt (in mehrere Token aufgeteilt) und jedes Token wird selbst durchsucht. Wenn der eingegebene Text "ABC DEF GHI" ist, wird er in drei separate Token aufgeteilt, nämlich "ABC", "DEF" und "GHI". Wenn Sie also Feld: ABC suchen, fragen Sie wirklich nach einem Dokument, das irgendwo den Token "ABC" hat.
Da Sie eine genaue Spiel ausführen möchten, wollen Sie gegen ein Feld abzufragen, die als string
Feld definiert ist, da dies den Wert halten wird wörtlich (einschließlich Gehäuse, so wird der passende Fall empfindlich sein). Sie können Solr anweisen, den gleichen Inhalt in mehrere Felder zu indizieren, indem Sie eine copyFile-Anweisung hinzufügen, um den für Feld foo
übermittelten Inhalt zu übernehmen und in Feld bar
zu kopieren, damit Sie bei Bedarf eine genaue Übereinstimmung und eine allgemeinere Übereinstimmung erzielen können Suche wenn nötig.
Wenn Sie exakte Suchvorgänge ohne Groß- und Kleinschreibung durchführen müssen, können Sie einen KeywordTokenizer verwenden. Der KeywordTokenizer tut nichts und behält die gesamte Zeichenfolge als einzelnes Token bei, bevor Sie der Analysekette Filter hinzufügen können. Indem Sie einen Kleinbuchstabenfilter hinzufügen, geben Sie Solr an, die Zeichenkette ebenfalls in Kleinbuchstaben zu schreiben, bevor Sie sie speichern (oder danach suchen).
Sie können die Seite "Analyse" auf der Solr-Administratorseite verwenden, um zu testen, wie der Inhalt für Ihr Feld in jedem Schritt verarbeitet wird.
Nach dieser Abfrage als string_field:ABC OR string_field:XYZ
sollte das tun, was Sie wollen (oder string_field:(ABC OR XYZ)
oder ein paar andere Möglichkeiten, um das gleiche auszudrücken
OMG es ist auch so in SolrJ (scala)! 'solrQuery.setQuery (s" "" sku: ($ {skus.mkString ("")}) "") '- funktioniert nicht ' solrQuery. setQuery (s "" "*: * UND sku: ($ {skus.mkString (" ")})" "") - arbeiten s! Lucene, warum machst du das ?! – Vasily802