Эластичный поиск: Как получить точное совпадение для каждого поля в поиске нескольких совпадений между полями?
Я пытаюсь выполнить точный поиск местоположения, то есть каждый термин в местоположении должен точно соответствовать хотя бы одному полю местоположения. Например, если я ищу "Садбери, Мидлсекс, Массачусетс", я хочу получить результаты, которые точно соответствуют каждому из этих трех терминов. Результат с 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, если вы всегда ищете конкретные термины?