Elasticsearch Wildcard-Suche im nicht analysierten Feld

7

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:

%Vor%

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

    
Hüseyin BABAL 16.01.2014, 11:53
quelle

4 Antworten

11

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%

%Vor%

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:

%Vor%

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

    
Hüseyin BABAL 17.01.2014, 12:30
quelle
12

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.

%Vor%     
Alex Brasetvik 16.01.2014 14:18
quelle
0

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 01.09.2016 10:09
quelle
0

@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

voranbringen wird

Zum Herausziehen des genauen Ergebnisses

%Vor%

und die Abfrage ist

%Vor%

Ergebnis

%Vor%     
Rajan 18.10.2016 13:05
quelle