У меня есть текущая схема:
- Объект
parent
со свойством date
и n дочерних элементов child
- Объект
child
содержит одно свойство foo
Я хочу получить все parent
, где все child
имеют свое свойство foo
равно 0
Я пробовал другой подход, ночто бы я ни делал, некоторые parent
извлекаются, а один child
имеет свойство foo
в 1
Пример моего запроса:
{
"query": {
"bool": {
"must": [
{
"range": {
"date": {
"lt": "2018-07-05T10:00:00.000Z"
}
}
},
{
"nested": {
"path": "child",
"query": {
"bool": {
"must": {
"term": {
"child.foo": 0
}
}
}
}
}
}
]
}
}
}
Я пытался с should
, match
, range
... даже must_not
/ should_not
.Я также безуспешно пытался фильтровать, я получаю хиты со свойством foo
на 1
.
Я также попробовал путь агрегации, но я не понимаю, как применить его к моим потребностям.
РЕДАКТИРОВАТЬ: Я посмотрел на возможный дубликат.Хотя он не ответил на мой вопрос, он поставил меня на правильный путь.Моя проблема заключалась в том, что я думал по-SQL, с соединениями и тому подобным.Хотя я должен был думать упругим образом.
Таким образом, то, что я хотел сделать, не могло быть сделано.Мне нужно было искать parent
, где хотя бы у одного child
было свойство foo
, равное 1 или более.Затем проигнорируйте эти результаты и возьмите другие.Таким образом, ответ прост: я просто добавляю, чтобы изменить must
вложенного запроса на must_not
, и все!