给定一个具有以下映射的对象:
{
"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”的那个)。
使用过滤器或查询对我来说都很好。
我已经尝试使用“不过滤 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-not-filter.html”和“Must_not 布尔过滤器 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html“。这个想法是使用双重否定来仅提取不具有与给定字段不同的字段的对象。
但是,我无法正确写下这个查询。
我意识到这不是搜索引擎的常见查询,但就我而言,它可能很有用。
是否可以使用嵌套对象编写此查询(“forall 嵌套查询”)?
如果不是,是否可以使用父子来编写此查询?
Update
如果我们知道我们想要避免的“key”的所有值(在示例中为“no”),Andrei Stefan 给出了一个很好的答案。
我也对您不知道要避免的值的情况感兴趣,并且您只想将嵌套对象与“key”=“yes”匹配。