Zeilenumbrüche oder Interpunktionszeichen als Positionslücken in elasticsearch

8

Gibt es in elasticsearch eine Möglichkeit, einen Analysator einzurichten, der bei Zeilenumbrüchen oder Interpunktionszeichen Positionslücken zwischen Token erzeugt?

Nehmen wir an, ich indexiere ein Objekt mit der folgenden unsinnigen Zeichenfolge (mit Zeilenumbruch) als eines seiner Felder:

%Vor%

Der Standardanalysator liefert die folgenden Token mit den entsprechenden Positionen:

%Vor%

Dies bedeutet, dass eine match_phrase Abfrage von the rabbit then comes diesem Dokument als Treffer entspricht. Gibt es eine Möglichkeit, eine Positionslücke zwischen rabbit und then einzuführen, sodass sie nicht übereinstimmt, wenn nicht slop eingeführt wird?

Natürlich könnte eine Umgehung die Umwandlung der einzelnen Zeichenfolge in ein Array (eine Zeile pro Eintrag) und die Verwendung von position_offset_gap in der Feldzuordnung sein, aber ich würde lieber eine einzelne Zeichenfolge mit Zeilenumbrüchen beibehalten (und eine ultimative Lösung würde dies tun) umfassen größere Positionslücken für Zeilenumbrüche als beispielsweise für Satzzeichen).

    
Shadocko 16.09.2015, 12:32
quelle

1 Antwort

6

Ich habe schließlich eine Lösung gefunden, die ein char_filter verwendet, um zusätzliche Token für Zeilenumbrüche und Interpunktionszeichen einzuführen:

%Vor%

Testen mit der Beispielzeichenfolge

%Vor%

liefert das folgende Ergebnis:

%Vor%     
Shadocko 23.09.2015, 13:37
quelle

Tags und Links