ElasticSearch: альтернатива использования match_phrase для поддержки нечеткости
Мои документы имеют поле "описание", содержащее от 3 до 10 предложений.
Я должен поддерживать нечеткость, потому что не могу ожидать от пользователя точно таких же слов.
С другой стороны, я должен использовать "match_phrase", а не "match", потому что, если слова находятся слишком далеко друг от друга, документ не имеет значения.
Проблема в том, что "match_phrase" не анализирует слова и, как следствие, не поддерживает нечеткость. (см. последний абзац здесь https://www.elastic.co/guide/en/elasticsearch/guide/master/phrase-matching.html).
Я думаю, мне нужно креативное решение, чтобы как-то выполнить эти два требования. Возможно, с помощью других поисковых запросов.
1 ответ
После некоторого копания в запросах "span" оказывается, что можно выполнить два вышеупомянутых запроса, используя "span_near" с "span_multi".
Вот пример поиска "привет мир" в поле "описание".
{
"span_near": {
"clauses": [{
"span_multi": {
"match": {
"fuzzy": {
"description": {
"value": "hello"
}
}
}
}
}, {
"span_multi": {
"match": {
"fuzzy": {
"description": {
"value": "world"
}
}
}
}
}],
"slop": 2,
"in_order": false,
"collect_payloads": false
}
},