【发布时间】:2018-10-26 22:23:37
【问题描述】:
我有当前架构:
- 对象
parent具有属性date和n 个孩子child - 对象
child包含单个属性foo
我想检索所有parent,其中所有 child 的属性foo 等于0
我尝试了不同的方法,但无论我做什么,一些parent 被检索,而一个child 在1 拥有foo 属性
我的查询示例:
{
"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。我也尝试过过滤,但没有任何运气,我一直在1 的foo 属性上获得点击。
我也尝试了聚合路径,但我不明白如何将其应用于我的需要。
编辑:我查看了可能的重复项。虽然它没有回答我的问题,但它让我走上了正轨。我的问题是我以 SQL 方式思考,使用连接等。虽然我应该以弹性的方式思考。
因此,我想做的事情无法完成。我需要寻找parent,其中至少有一个child 的foo 属性为1 或更多。然后,忽略这些结果并采取其他结果。因此答案很简单:我只需添加以将嵌套查询的must 更改为must_not,就是这样!
【问题讨论】:
-
基本上must(嵌套所有(must))= must_not(嵌套至少一个(must_not))。
-
感谢您的意见。虽然在我的情况下语法不同(
not不存在),但我通过不同的思考找到了解决方案。 -
我不确定我是否理解 - 我从来没有提到过
not,只有must_not:) 无论如何,很高兴你有一个解决方案。考虑将其张贴在这里以供后代使用。 -
我说的是你提供的链接^^无论如何感谢你我走上了正确的轨道。
标签: elasticsearch search