/ / Elasticsearch Analyse API Oddity - Suche, Elasticsuche, Analyse

Elasticsearch Analyse API Oddity - Suche, Elasticsearch, Analyse

Meine Frage ist ziemlich einfach. Angenommen, ich habe eine Typzuordnung in einem Index, die folgendermaßen aussieht

"mappings" : {
"post" : {
"analyzer" : "my_custom_analyzer",
"properties" : {
"body" : {
"type" : "string",
"store" : true
}
}
}
}

Beachten Sie, dass ich angegeben habe my_custom_analyzer als Analysator für den Typ. Wenn ich das Textfeld durchsuche, ohne einen Analyzer in der Abfrage anzugeben, ich erwarte my_custom_analyzer benutzt werden. Wenn ich jedoch die Analyse-API zum Abfragen des Feldes verwende:

curl http://localhost:9200/myindex/_analyze?field=post.body&text=test

Es gibt Standardanalyseergebnisse für string zurück. Wenn ich den Analyzer spezifiziere, funktioniert er:

curl http://localhost:9200/myindex/_analyze?analyzer=my_custom_analyzer&text=test

Meine Frage lautet: Warum verwendet die Analyse-API nicht den Standardtyp-Analysator, wenn ich ein Feld eingebe?

Antworten:

2 für die Antwort № 1

Analysator ist pro Zeichenkettenfeld. Sie können es nicht auf ein Objekt oder verschachteltes Objekt anwenden und hoffen, dass alle Felder unter diesem Objektfeld dieses Analysegerät erben. Der richtige Ansatz lautet wie folgt:

"mappings" : {
"post" : {
"properties" : {
"body" : {
"type" : "string",
"analyzer" : "my_custom_analyzer",
"store" : true
}
}
}
}

Der Grund für die Analyse des Analysators für die Analyse-API ist, dass Sie den Analysator für diesen Index deklariert haben.

Wenn Sie Analyzer für alle String-Felder unter einem bestimmten Objekt definieren möchten, müssen Sie dies in der Typvorlage angeben. Mehr Informationen dazu erhalten Sie hier - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-root-object-type.html#_dynamic_templates