У меня есть массив тегов, содержащих слова.
tags: ['australianbrownsnake', 'venomoussnake', ...]
Как мне сопоставить эти термины поиска: «коричневая змея», «австралийская змея», «ядовитая», «ядовитая коричневая змея»
Я даже не уверен, чтоэто возможно, так как я новичок в Elasticsearch. Помощь будет оценена. Спасибо.
Редактировать: Я создал анализатор ngram и добавил поле с именем ngram, вот так.
properties": {
"tags": {
"type": "text",
"fields": {
"ngram": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
я пробовал следующий запрос, но не повезло
"query": {
"multi_match": {
"query": "snake",
"fields": [
"tags.ngram"
],
"type": "most_fields"
}
}
мое отображение тегов выглядит следующим образом:
"tags" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
},
"ngram" : {
"type" : "text",
"analyzer" : "my_analyzer"
}
}
},
мои настройки:
{
"image" : {
"settings" : {
"index" : {
"max_ngram_diff" : "10",
"number_of_shards" : "1",
"provided_name" : "image",
"creation_date" : "1572590562106",
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "my_tokenizer"
}
},
"tokenizer" : {
"my_tokenizer" : {
"token_chars" : [
"letter",
"digit"
],
"min_gram" : "3",
"type" : "ngram",
"max_gram" : "10"
}
}
},
"number_of_replicas" : "1",
"uuid" : "pO9F7W43QxuZmI9vmXfKyw",
"version" : {
"created" : "7040299"
}
}
}
}
}