我有这样的结构:
{ "id": "object1", "fields": [{"id": 100, "value": "one"}, {"id": 101, "value": "abc"}]}
{ "id": "object2", "fields": [{"id": 100, "value": "two"}, {"id": 101, "value": "cde"}]}
{ "id": "object3", "fields": [{"id": 100, "value": "three"}]}
其中 fields 是嵌套数据类型。
使用嵌套查询,我可以获取具有给定字段特定值的所有对象(例如,使用field.id = 101 && field.value =“ abc”我可以获取object1)。
如何查询其 fields 数组不包含其ID所给定字段的对象?
我要寻找的基本上是一个接受谓词的 exists 查询(然后可以取反)。
答案 0 :(得分:2)
由于您正在处理嵌套文档,因此您希望如果两个嵌套文档都不符合条件,则应将该文档视为匹配项。如果我改写这个意思,我可以说不要获取嵌套条件与条件匹配的文档。将此转换为查询dsl,
GET <index>/_search
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "fields",
"query": {
"term": {
"fields.id": 101
}
}
}
}
]
}
}
}