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. Я обновил свой ответ.