查询嵌套数组中不包含给定对象的文档

Query for documents that do not contain given object in a nested array

我有这样的结构:

{ "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"}]}

其中 字段 是一种嵌套 数据类型。

通过嵌套查询,我可以获得所有具有给定字段特定值的对象(例如:field.id = 101 && field.value = "abc" 我可以获得对象 1 ).

如何查询其 字段 数组 不包含 给定字段的对象?

我正在寻找的基本上是一个接受谓词的 exists 查询(然后我可以否定它)。

由于您正在处理嵌套文档,并且您希望如果嵌套文档均不匹配条件,则应将该文档视为匹配项。如果我改写一下,我可以说不要获取具有符合条件的嵌套文档的文档。将其转换为查询 dsl,

GET <index>/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "nested": {
            "path": "fields",
            "query": {
              "term": {
                "fields.id": 101
              }
            }
          }
        }
      ]
    }
  }
}