【问题标题】:Find Elasticsearch value of empty object查找空对象的 Elasticsearch 值
【发布时间】:2018-02-16 17:38:39
【问题描述】:

我想运行一个查询来查看有多少文档存储了一个空对象作为它们的值。例如,它会返回如下文档:

"hits": [
  {
    "_source": {
      "otherfield": "abc",
      "somefield": {}
    }
  }
]

但不是没有字段/具有未定义值的字段,或具有包含属性的对象的字段:

"hits": [
  {
    "_source": {
      "otherfield": "abc",
      // <-- note no "somefield"
    }
  },
  {
    "_source": {
      "otherfield": "abc",
      "somefield": { "field1": "value1" }
    }
  }
]

但是我的查询也会返回字段是具有"somefield": { "field1": "value1" }等属性的对象的文档

GET /documents/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "somefield.field1"
          }
        },
      ]
      "should": [
        {
          "exists": {
            "field": "somefield"
          }
        }
      ],
      "minimum_should_match": 2
    }
  }
}

使用 Elasticsearch 5.4

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    以下查询应该足以找到所有带有空 somefield 字段的文档:

    {
      "query": {
        "bool": {
          "must_not": {
            "exists": {
              "field": "somefield"
            }
          }
        }
      }
    }
    

    虽然您的查询对我来说有点令人困惑。首先,您尝试查找不存在 somefield.field1 的任何文档。然后将must_not 子句的内容与should 子句的互斥内容相结合,该子句过滤具有非空somefield 的文档。其实should子句被翻译成

    "should": [{
        "exists": {"field": "somefield.field1"}
    }]
    

    因此,您的查询不应匹配带有 somefield: {} 的文档或带有 somefield: {field1: value1} 的文档。

    【讨论】:

    • 谢谢。已澄清问题以明确我想查找对象为空的所有文档,而不是字段根本不存在或字段值是具有属性的对象。
    • @AJP 感谢您的澄清。现在我明白你的问题了。我认为根本无法区分带有空somefield 的文档和没有somefield 的文档。从 Elasticsearch 的角度来看,它们是相同的。您可以使用 Term Vectors 查询 (GET /my_index/my_type/&lt;id&gt;/_termvectors?fields=*) 来验证它。这种区分应该在客户端进行。
    • 很有趣,谢谢。以前没有遇到过Term Vectors。令人惊讶的是,没有像 match: { somefield: "{}" } 这样的查询而不是 match: { somefield: undefined }(您实际上会使用 must_not: { exists: { field: "somefield" }}),因为文档中字段的值彼此明显不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2020-03-14
    • 2022-11-18
    • 2022-08-17
    相关资源
    最近更新 更多