如何从 json 映射到 ElasticSearch 中的 select 特定键

How to select particular key from json map in ElasticSearch

我在 ES 中有 json 文档,如下所示:

{
  "indicators": 
    {
      "i1": { ... }
    }, 
    {
      "i2": { ... }
    }
}

indicators 是一个从字符串键到对象的映射。我需要 select 包含特定密钥的文档。

正在尝试从 Kibana 中这样查询 UI:

indicators.i2 :*

但这行不通。在这种情况下,正确的查询是什么?

据我所知,您需要获取那些包含特定字段的文档(在您的情况下,假设该字段是 indicators.i1

要达到要求的效果,需要使用exists query.

添加带有索引数据和搜索查询的工作示例

索引数据:

POST tidx/_doc/1
{
  "indicators": [
    {
      "i1": {
        "city": "indore"
      }
    },
    {
      "i2": {
        "city": "bangalore"
      }
    }
  ]
}

POST tidx/_doc/2
{
  "indicators": [
    {
      "i2": {
        "city": "bangalore"
      }
    }
  ]
}

搜索查询:

POST tidx/_search
{
  "query": {
    "exists": {
      "field": "indicators.i1"
    }
  }
}

搜索响应:

"hits" : [
      {
        "_index" : "tidx",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "indicators" : [
            {
              "i1" : {
                "city" : "indore"
              }
            },
            {
              "i2" : {
                "city" : "bangalore"
              }
            }
          ]
        }
      }
    ]