Эластичный поиск: Как получить точное совпадение для каждого поля в поиске нескольких совпадений между полями?

Я пытаюсь выполнить точный поиск местоположения, то есть каждый термин в местоположении должен точно соответствовать хотя бы одному полю местоположения. Например, если я ищу "Садбери, Мидлсекс, Массачусетс", я хочу получить результаты, которые точно соответствуют каждому из этих трех терминов. Результат с location.city.name = Sudbury, location.county.name = Middlesex и location.region.name = Massachusetts будет соответствовать.

{
"multi_match": {
    "fields": [
        "location.city.name",
        "location.region.name",
        "location.county.name",
        "location.country.name"
    ],
    "query": "Sudbury, Middlesex, Massachusetts",
    "type": "cross_fields",
    "operator": "and"
}

Это очень близко, однако я также получаю результаты для "Восточного Садбери". Я не хочу Восточного Садбери, я хочу только результаты, которые точно соответствуют полю. Как я могу это сделать? Я знаю, что "тип":"фраза" неверна, потому что тогда он будет искать всю фразу "Садбери, Мидлсекс, Массачусетс" в каждом поле и не даст результатов.

1 ответ

Похоже, что поле location.city.name анализируется и разбивается на "Восточный Садбери" на "Восток" и "Садбери" и возвращается для поиска "Садбери".

Попробуйте установить в поле not_analyzed, если вы всегда ищете конкретные термины?

Другие вопросы по тегам