Оберните все ваши запросы в should
-предложение bool
-запроса, который вы поместите в filter
-предложение другого bool
-запроса верхнего уровня.
Псевдо- код (как я печатаю на мобильном телефоне):
“bool”: {
“filter”: {
“bool”: {
“should”: [
{query1},
{query2},
{query3}
]
}
}
}
В bool
- запросе, состоящем только из should
-классов, будет требоваться, чтобы хотя бы один из запросы в предложении should
должны совпадать (minimum_should_match
- будет в таком сценарии).
Обновление с фактическим запросом (дополнительное объяснение):
POST <your_index_name>/_search
{
"query": {
"bool": {
"filter": {
"bool": {
"should": [
{"bool": {{"must": [ {"term": {"PId": "10"}},{"term": {"PUId": "1130"}} ]}}},
{"bool": {{"must": [ {"term": {"PId": "30"}},{"term": {"PUId": "2000"}} ]}}},
{"term": {"PlayerId": "12345"}}
]
}
}
}
}
}
Приведенный выше пример оборачивает ваш фактический bool
-запрос в filer
-класс другого высокоуровневого bool
-запроса, чтобы следовать передовым методикам и гарантировать лучшую производительность: всякий раз, когда вы не не заботясь о баллах, особенно когда речь идет о точных совпадениях запросов, вы должны поместить их в filter
-пункты. Для этих запросов Elasticsearch будет не вычислять оценку и, следовательно, может даже потенциально кэшировать результаты этого запроса для еще большей производительности.