我有当前模式:
parent
和n个孩子date
的对象child
child
包含单个属性foo
我想检索所有parent
,其中 all 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方式。我本该以弹性的方式思考。
因此,我想做的事情无法完成。我需要寻找的是1
,其中至少一个parent
的{{1}}属性等于或大于1。然后,忽略这些结果并取其他结果。因此答案很简单:我只是添加了将嵌套查询的child
更改为foo
的过程,就是这样!
答案 0 :(得分:0)
正如我在问题编辑中所解释的那样,一旦您开始以正确的方式思考,答案就相当容易。/
{
"query": {
"bool": {
"must": [
{
"range": {
"date": {
"lt": "2018-07-05T10:00:00.000Z"
}
}
},
{
"nested": {
"path": "child",
"query": {
"bool": {
"must_not": {
"term": {
"child.foo": 0
}
}
}
}
}
}
]
}
}
}
诀窍只是设置绝非