В эластичном поиске необходимо выполнить сопоставление полей перед индексацией данных. Сопоставление - это способ информированияasticsearch для индексирования данных особым образом для извлечения данных желаемым способом.
Попробуйте следующий DSL-запрос (формат JSON) для создания собственного анализатора и сопоставления:
PUT {YOUR_INDEX_NAME}
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
}
}
},
"max_ngram_diff": 20 //For Elasticsearch v6 and above
},
"mappings": {
"properties": {
"code": {"type": "long"},
"description": {
"type": "text",
"analyzer": "my_analyzer"
},
"display_name": {
"type": "text",
"analyzer": "my_analyzer"
},
"brand": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
Пример запроса:
GET {YOUR_INDEX_NAME}/_search
{
"query": {
"multi_match" : {
"query" : "women",
"fields" : [ "description^3", "display_name", "brand" ]
}
}
}
Я предлагаю вам взглянуть на нечеткий запрос на наличие орфографических ошибок.
Попробуйте использовать пользовательский интерфейс Kibana для тестирования индекса с помощью DSL-запроса, а не cURL, что сэкономит ваше время.
Надеюсь, это поможет вам.