【问题标题】:ElasticSearch: Getting all values for nested fieldElasticSearch:获取嵌套字段的所有值
【发布时间】:2017-04-03 14:03:44
【问题描述】:

我是 ElasticSearch 的新手,正在使用 v5.1.2 尝试获取嵌套字段的所有值,在我的示例中是 firstname 中的值。我的数据:

PUT my_index/my_type/1
{
  "group" : "fans",
  "user" : [
    {
      "firstname" : "John",
      "lastname" :  "Smith"
    },
    {
      "firstname" : "Alice",
      "lastname" :  "White"
    },
    {
      "lastname": "Muller" 
    }
  ]
}

我希望我的查询结果是名字“John”和“Alice”。 例如,我尝试了几个聚合查询:

GET my_index/my_type/_search
{
  "size":0,
  "aggs": {
    "myagg": {
      "terms": {
        "field": "user.firstname"
      }
    }
  }
}

但没有成功。如何进行这种查询?

【问题讨论】:

    标签: json elasticsearch kibana


    【解决方案1】:

    您必须首先为您的索引声明一个mappings,用户为nested 字段

    PUT my_index3
    {
      "mappings": {
        "my_type": {
          "properties": {
            "user": {
              "type": "nested",
              "properties": {
                "firstname":{
                  "type":"keyword"
                }
              }
            }
          }
        }
      }
    }
    
    
    PUT my_index3/my_type/1
    {
      "group" : "fans",
      "user" : [
        {
          "firstname" : "John",
          "lastname" :  "Smith"
        },
        {
          "firstname" : "Alice",
          "lastname" :  "White"
        },
        {
          "lastname": "Muller" 
        }
      ]
    }
    

    声明映射后,您可以使用nested aggregations,如下所示。

    POST my_index3/_search
    {
      "size": 0,
      "aggs": {
        "nested_user": {
          "nested": {
            "path": "user"
          },
          "aggs": {
            "firstname": {
              "terms": {
                "field": "user.firstname",
                "size": 10
              }
            }
          }
        }
      }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2021-06-28
      • 2020-04-04
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多