Поисковый запрос Elasticsearch: вложенный запрос с OR-gates

elasticsearch

#elasticsearch

Вопрос:

У меня есть следующие документы: { «имя»: «…», «страна»: «…», }

Мне нужно найти. любой из следующих критериев:

  • имя = Джон И страна = США
  • имя = Энди И страна = Великобритания

Как следует написать этот вложенный запрос?

Ответ №1:

Предполагая, что сопоставление полей по умолчанию определено, вы можете использовать логические запросы следующим образом:

 {
    "query": {
        "bool": {
            "should": [
                {
                    "bool": {
                        "filter": [
                            {
                                "term": {
                                    "name.keyword": "John"
                                }
                            },
                            {
                                "term": {
                                    "country.keyword": "US"
                                }
                            }
                        ]
                    }
                },
                {
                    "bool": {
                        "filter": [
                            {
                                "term": {
                                    "name.keyword": "Andy"
                                }
                            },
                            {
                                "term": {
                                    "country.keyword": "UK"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}
 

Вы должны использовать must вместо filter , если хотите, чтобы запрос внес вклад в оценку.

необходимо

Предложение (запрос) должно появляться в соответствующих документах и будет способствовать оценке.

Фильтр

Предложение (запрос) должно отображаться в соответствующих документах. Однако, в отличие от must, оценка запроса будет проигнорирована. Предложения фильтра выполняются в контексте фильтра, что означает, что оценка игнорируется, а предложения рассматриваются для кэширования.

Комментарии:

1. Что, если я заменю «фильтр» на «обязательно»?

2. Я обновил свой ответ.