Вам необходимо использовать фильтр токенов шингла
Фильтр токенов типа шингл, который создает дранку (n-грамм токена) из потока токенов. Другими словами, он создает комбинации токенов как один токен. Например, предложение «пожалуйста, разделите это предложение на черепицу» может быть разбито на черепицы «пожалуйста, разделите», «разделите это», «это предложение», «предложение на» и «на черепицу».
Отображение
PUT index91
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"shingle_filter"
]
}
},
"filter": {
"shingle_filter": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3,
"output_unigrams": true,
"token_separator": ""
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
Данные:
POST index91/_doc
{
"title":"corona virus"
}
Запрос:
GET index91/_search
{
"query": {
"match": {
"title": "coronavirus"
}
}
}
Результат:
"hits" : [
{
"_index" : "index91",
"_type" : "_doc",
"_id" : "gNmUZHEBrJsHVOidaoU_",
"_score" : 0.9438393,
"_source" : {
"title" : "corona virus"
}
}
Это также будет работать для "корона", "вирус короны", "вирус"