То, что вы ищете, это фильтр токенов синонимов . Вам необходимо создать собственный анализатор, который использовал этот фильтр, чтобы при вводе строки fresh fruit
или fruit
он генерировал один токен fruit
. Вы можете добиться этого, определив анализ в настройках индекса. Создайте пользовательский анализатор, который использует фильтр, а затем примените этот анализатор к полю category
, как показано ниже:
PUT my_index
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"my_synonym_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"custom_synonym"
]
}
},
"filter": {
"custom_synonym": {
"type": "synonym",
"synonyms": [
"fresh fruit, fruit => fruit"
],
//"synonyms_path": "analysis/synonyms.txt" <---- replace "synonyms" above with this to use file instead of array of synonyms
}
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"category": {
"type": "text",
"analyzer": "my_synonym_analyzer"
}
}
}
}
}
Теперь при поиске fruit
или fresh fruit
по category
документам полей с fruit
или fresh fruit
будут совпадать. Это связано с тем, что при поиске с упругим полевым поиском по умолчанию используется тот же анализатор для строки поиска, который был применен к полю при индексации, который в этом случае в конечном итоге сводится к fruit
в любом случае (fruit
или fresh fruit
) и, следовательно, документы будут совпадать.