获取所有不包含密钥的文档?

时间:2016-11-03 09:09:28

标签: elasticsearch

例如,我有2种类型的文档,例如

{
    "field2":"xx",
    "field1","x"
}
{
    "field1","x"
}

一个有2个字段(field1field2),另一个只有1个字段(field1)。

现在,我想查询所有没有field2字段的文档?

EIDT DSL:

 {
    "query": {
        "bool": {
            "filter": [
                {
                    "exists": {
                        "field": "LableToMember"
                    }
                }
            ]
        }
    }
}

DOC:

{
    "LableToMember": [
        {
            "xxx": "xxx",
            "id": "1"
        }
    ],
    "field2":"xxx"
}  

LableToMember是一个嵌套字段。我发现exists api不能用于嵌套字段吗?

2 个答案:

答案 0 :(得分:2)

请注意,在ES 5.x中,missing query has been removed赞成exists

因此,如果你想要向前兼容,你应该更喜欢使用它:

POST /_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "field2"
                }
            }
        }
    }
}

<强>更新

如果您要检索所有没有field2field2且具有给定值的文档,您可以这样做:

POST /_search
{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "field2"
              }
            }
          }
        },
        {
          "term": {
            "field2": "somevalue"
          }
        }
      ]
    }
  }
}

答案 1 :(得分:0)

简而言之,您希望查询缺少field2的文档。您可以使用Missing Query之类的:

"filter" : {
              "missing" : { "field" : "field2" }
           }

希望有所帮助