Ich habe einen Index wie folgende Einstellungen und Zuordnung;
%Vor% Ich habe Probleme damit, eine Implementierung für die Wildcard-Suche im Feld name
zu erstellen. Meine Beispieldaten wie folgt:
Wenn ich folgende Abfrage durchführe;
%Vor% Es gibt SVF-123
, SVF-234
zurück. Ich denke, es tunkiert immer noch Daten. Es muss nur SVF-123
zurückgegeben werden.
Könnten Sie mir bitte dabei helfen?
Vielen Dank im Voraus
Mein Lösungsabenteuer
Ich habe meinen Fall begonnen, wie Sie in meiner Frage sehen können. Immer wenn ich einen Teil meiner Einstellungen geändert habe, hat ein Teil angefangen zu arbeiten, aber ein anderer Teil hört auf zu arbeiten. Lass mich meine Lösungshistorie geben:
1.) Ich habe meine Daten als Standard indexiert. Das heißt, meine Daten sind analyzed
als Standard. Dies wird Probleme auf meiner Seite verursachen. Zum Beispiel:
Wenn der Benutzer mit der Suche nach einem Schlüsselwort wie SVF-1 begonnen hat, führt das System diese Abfrage aus:
%Vor%und Ergebnisse;
%Vor% Das ist normal, weil das Feld name
meiner Dokumente analyzed
ist. Dadurch wird die Abfrage in die Token SVF
und 1
aufgeteilt, und SVF
stimmt mit meinen Dokumenten überein, obwohl 1
nicht übereinstimmt. Ich habe diesen Weg ausgelassen. Ich habe eine Zuordnung für meine Felder erstellt% ce_de%
aber mein Problem ging weiter.
2.) Ich wollte nach vielen Recherchen einen anderen Weg gehen. Entschieden, Wildcard-Abfrage zu verwenden. Meine Abfrage ist;
%Vor%Diese Abfrage hat funktioniert, aber hier ein Problem. Meine Felder werden nicht mehr analysiert, und ich mache eine Platzhalterabfrage. Groß- / Kleinschreibung ist hier ein Problem. Wenn ich wie svf-1 suche, wird nichts zurückgegeben. Da kann Benutzer Kleinbuchstaben Version der Abfrage eingeben.
3.) Ich habe meine Dokumentstruktur in
geändert %Vor% Ich habe ein weiteres Feld für not_analyzed
namens name
hinzugefügt. Wenn ich mein Dokument indexiere, setze ich mein Dokument wie folgt:
Hier konvertiere ich das Abfrage-Schlüsselwort in Kleinbuchstaben und führe die Suchoperation für den neuen nameLowerCase
index aus. Und nameLowerCase
field anzeigen.
Endgültige Version meiner Abfrage ist;
%Vor%Jetzt funktioniert es. Es gibt auch eine Möglichkeit, dieses Problem zu lösen, indem Sie multi_field . Meine Abfrage enthält Bindestrich (-) und einige Probleme.
Vielen Dank an @Alex Brasetvik für seine ausführliche Erklärung und seinen Einsatz
Hier gehen ein paar Dinge schief.
Erstens, Sie sagen, dass Sie nicht möchten, dass Begriffe Indexzeit analysiert werden. Dann gibt es einen konfigurierten Analysator (der die Suchzeit verwendet), der inkompatible Terme generiert. (Sie sind Kleinbuchstaben)
Standardmäßig enden alle Terme im Feld _all
mit dem Standardanalysator. Dort suchst du am Ende. Da es auf "-" steht, erhalten Sie ein ODER von "* SVF" und "1 *".
Versuchen Sie, eine Terms-Facette für _all und für name auszuführen, um zu sehen, was passiert.
Hier ist ein lauffähiges Spiel und ein richtiger Text: Ссылка ( Ссылка )
Sie müssen sicherstellen, dass die Begriffe, die Sie indexieren, mit Ihren Suchkriterien kompatibel sind. Wahrscheinlich möchtest du _all
deaktivieren, da es schlammigen kann, was gerade passiert.
Wenn wir Hüseyins Antwort hinzufügen, können wir AND als Standardoperator verwenden. Also werden SVF und 1 * mit dem Operator AND verknüpft, was uns die richtigen Ergebnisse liefert.
%Vor% @Viduranga Wijesooriya, wie Sie angegeben haben "default_operator" : "AND"
prüft, ob SVF und 1 vorhanden sind, aber eine genaue Übereinstimmung ist noch nicht möglich,
Aber ya das wird die Ergebnisse in geeigneter Weise filtern mit allen Kombinationen von SVF und 1 und Sortieren der Ergebnisse nach Relevanz, die SVF-1 in der Reihenfolge
Zum Herausziehen des genauen Ergebnisses
%Vor%und die Abfrage ist
%Vor%Ergebnis
%Vor%Tags und Links tokenize search elasticsearch lucene