Я использую ES 2.3 и есть запрос, в котором filter
секция выглядит следующим образом:Elasticsearch: выполнить фильтр на вложенном документе, только если он существует
"filter": {
"query": {
"bool": {
"must": [
{
"nested": {
"path": "employees",
"query": {
"bool": {
"must": [
{
"range": {
"employees.max_age": {
"lte": 50
}
}
},
{
"range": {
"employees.min_age": {
"gte": 20
}
}
}
]
}
}
}
},
{
"exists": {
"field": "employees"
}
},
{
#....other filter here based on root document, not on nested employee document
}
]
}
}
}
}
У меня есть фильтр, где я проверить некоторые условия в вложенный документ «сотрудники» в более крупном документе, называемом компанией, но я хочу запустить этот фильтр, только если существует объект «employee», так как некоторые из документов могут вообще не иметь этого вложенного документа. Поэтому я добавил, {"exists": {"field": "employees"}}
, но это не работает. Подумайте, какое изменение я должен внести, чтобы заставить его работать?
Вы должны переместить 'exists' запрос внутри' nested' запрос и он будет работать – Val
@Val пожалуйста, вы можете показать мне, где я должен точно поставить его? – JVK
Также, если вы поместили его внутри 'inested', то вы уже предполагаете, что вложенный уже существует, тогда только он пройдет? – JVK