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
    }
},
Другие вопросы по тегам