Emma
Emma

Reputation: 134

Elasticsearch aggregation

=======update here ====

i changed data_list to be nested and in mapping i set type to be `object'. the following is my new aggregation query:

"aggs": 
{
    "data_result": {
      "nested": {
        "path": "data_list"
      }, 
      "aggs": {
        "id": {
          "terms": {"field":"data_list.id"},
          "aggs":{
          "values": {
            "reverse_nested": {}, 
            "aggs": {
              "value_item": {
                "terms": {
                  "field": "data_list.value"
                }
              }
            }

          }
        }
        }

      }

    }

}

but i got empty `values` bucket

=========================the following is original question ==================== i am trying to get aggregation result from Elasticsearch. My data structure is as following:

DOC 1: 
"data_list": [
    {
        "id": 1,
        "name": "a",
        "value": "a_value1"
    },
    {
        "id": 2,
        "name": "b",
        "value": "b_value1"
    }
]

DOC 2: 
"data_list": [
    {
        "id": 1,
        "name": "a",
        "value": "a_value2"
    },
    {
        "id": 2,
        "name": "b",
        "value": "b_value2"
    }
]

My elasticsearch query is :

"aggs": {
    "data_result" : { 
        "terms" : {"field" : "data_list.id"} ,
        "aggs": {
            "values": {
                "terms": {"field": "data_list.value"}
            }
        }
    }
}

what i want is to get a result as following:

"aggregations": {
    ...
    "data_result": {
        "buckets": [
             {
                 "key": 1,
                 "values": ["a_value1","a_value2"]
             },
             {
                 "key": 2,
                 "values": ["b_value1","b_value2"]
             },
        ]
    }
}

but what i got is :

"buckets": [
     {
         "key": 1,
         "values": ["a_value1","a_value2","b_value1","b_value2"]
     },
     {
         "key": 2,
         "values": ["a_value1","a_value2","b_value1","b_value2"]
     }
]

does anyone has any idea how should i change aggregation query?

Upvotes: 1

Views: 90

Answers (2)

user3775217
user3775217

Reputation: 4803

this should work

PUT nested_index1
{
  "mappings": {
    "document_type" : {
      "properties": {
        "data_list" : {
          "type": "nested",
          "properties": {
            "value" : {
              "type" : "text",
              "fields" : {
                "raw" : {
                  "type" : "keyword"
                }
              }
            }
          }
        }
      }
    }
  }
}


POST nested_index1/document_type
{"data_list": [
    {
        "id": 1,
        "name": "a",
        "value": "a_value1"
    },
    {
        "id": 2,
        "name": "b",
        "value": "b_value1"
    }
]}

POST nested_index1/document_type
{
  "data_list": [
    {
        "id": 1,
        "name": "a",
        "value": "a_value2"
    },
    {
        "id": 2,
        "name": "b",
        "value": "b_value2"
    }
]
}


POST nested_index1/document_type/_search
{
  "size": 0, 
  "aggs": {
    "nested_agg": {
      "nested": {
        "path": "data_list"
      },
      "aggs": {
        "data_list_id": {
          "terms": {
            "field": "data_list.id",
            "size": 10
          },
          "aggs": {
            "data_list_value": {
              "terms": {
                "field": "data_list.value.raw",
                "size": 10
              }
            }
          }
        }
      }
    }
  }
}

Upvotes: 0

alr
alr

Reputation: 1804

you may want to take a look at nested datatype and the nested aggregation

--Alex

Upvotes: 2

Related Questions