【发布时间】:2019-03-15 02:15:08
【问题描述】:
给定一个具有以下映射的对象:
{
"a": {
"properties": {
"id": {"type": "string"}
"b": {
"type": "nested",
"properties": {
"key": {"type": "string"}
}
}
}
}
}
我想检索该对象的所有实例,该对象的所有嵌套子项都与给定查询匹配。
例如,假设我想检索所有具有“key”=“yes”的孩子的所有实例。 鉴于以下情况:
{
"id": "1",
"b": [
{
"key": "yes"
},
{
"key": "yes"
}
]
},
{
"id": "2",
"b": [
{
"key": "yes"
},
{
"key": "yes"
},
{
"key": "no"
}
]
},
我只想检索第一个(“id”=“1”的那个)。
对我来说,使用过滤器或查询都可以。 我已经尝试使用“not filter”和“must_not bool filter”。这个想法是使用双重否定来仅提取没有与给定字段不同的字段的对象。 但是,我无法正确写下此查询。
我意识到这不是搜索引擎的常见查询,但就我而言,它可能很有用。
是否可以使用嵌套对象编写此查询(“forall 嵌套查询”)? 如果不是,是否可以使用父子编写此查询?
更新
Andrei Stefan 给出了一个很好的答案,以防我们知道我们想要避免的所有“key”值(在示例中为“no”)。
如果您不知道要避免的值,并且只想将嵌套对象与“key”="yes" 匹配,我也很感兴趣。
【问题讨论】:
标签: elasticsearch