Lösung 1: Erfordert eine Änderung des erstellten benutzerdefinierten Analysators und das Hinzufügen dieses im Feldnamen
Punkt 1: Hinzufügen eines Kleinbuchstaben-Tokenizers im Mapping
Whitespace-Tokenizer konvertiert die Token nicht in Kleinbuchstaben. Und in der Liste der Synonyme haben Sie 'Television'
hinzugefügt, aber Sie fragen 'television'
ab.
Fügen Sie Ihrem Mapping wie folgt einen Token-Filter in Kleinbuchstaben hinzu, und Ihre Abfrage würde Ihnen das erwartete Ergebnis liefern.
Ziffer 2: Analyzer zum Feldnamen hinzufügen
Überprüfen Sie die prd_name
wie ich in der folgenden Zuordnung erstellt habe. Beachten Sie, dass ich Analyzer hinzugefügt habe.
Mapping
PUT products{ "settings":{ "index":{ "analysis":{ "analyzer":{ "synonym":{ "tokenizer":"whitespace", "filter": } }, "filter":{ "synonym":{ "type":"synonym", "synonyms_path":"analysis/synonym.txt" } } } } }, "mappings":{ "mydocs":{ "properties":{ "prd_name":{ "type":"text", "analyzer":"synonym", "fields":{ "keyword":{ "type":"keyword", "ignore_above":256 } } } } } }}
Beachten Sie, dass Sie bei jeder Änderung der Zuordnung den Index neu erstellen und die Dokumente erneut aufnehmen müssen.
Stellen Sie sicher, dass Ihre Synonym-Datei in allen Knoten verfügbar ist.
Lass es mich wissen, wenn es hilft.
Lösung 2: Standardanalysator neu definieren
Falls Sie die Zuordnung des Feldes nicht ändern können, können Sie in den Einstellungen
einen Analysator mit dem Namen default
erstellen Im Grunde neu definieren des Analysators default
mit Einstellungen genau wie Analysator synonym
.
Auf diese Weise wäre es der Standardanalysator, der anstelle von standard
analyzer verwendet wird und keine Änderung der Zuordnung des Feldnamens erfordert.
Unten ist, wie die Zuordnung in diesem Fall aussehen würde.
Mapping
PUT <your_index_name>{ "settings":{ "index":{ "analysis":{ "analyzer":{ "default":{ "tokenizer":"whitespace", "filter": } }, "filter":{ "synonym":{ "type":"synonym", "synonyms_path":"analysis/synonym.txt" } } } } }, "mappings":{ "mydocs":{ "properties":{ "prd_name":{ "type":"text", "fields":{ "keyword":{ "type":"keyword", "ignore_above":256 } } } } } }}
Beachten Sie, dass ich im Mapping einfach synonym
in default
umbenannt habe.
Wichtiger Hinweis: Irgendwie müssten Sie alle Daten neu indizieren, damit die Änderungen wirksam werden. Für den Fall, dass Sie die Zuordnung ändern, alle Daten neu indizieren und alles tun können, was Sie mit Feldnamen möchten, empfehle ich dringend Lösung 1.
Lass es mich wissen, wenn das hilft 🙂