sum聚合不适用于重复数据elasticsearch

时间:2016-11-11 15:33:21

标签: elasticsearch sum aggregation

例如,我的映射有一个属性“itemDetails”,就像这个

{
  "properties":{
    "itemDetails":{
      "properties":{
        "id1":{"type": "long"},
        "iddetailCode1": {"type": "string"},
        "id2":{"type": "long"},
        "iddetailCode2": {"type": "string"},
        "amount": {"type": "double"}
      } 
    }
  }
}

并且对于一个项目,它有多个记录。我想按iddetailCode1进行分组,并总结所有金额。但是,如果两个rocords具有相同的数量,它只计算一次,我无法获得正确的数据。

我的查询是这样的。

{
    "aggs": {
    "user_likes": {
      "terms": {
        "field": "itemDetails.entityDetailCode1"
      },
      "aggs": {
        "likes_sum": {
          "sum": {
            "field": "itemDetails.amount"
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

最后,我有解决方案,在这种情况下,当放置映射时,我们必须更改" itemDetails"的数据类型。 to"嵌套"。 "嵌套类型是对象数据类型的专用版本,它允许对象数组彼此独立地索引和查询"。 映射应该是:

{
  "properties":{
    "itemDetails":{
      "type": "nested",
      "properties":{
        "id1":{"type": "long"},
        "iddetailCode1": {"type": "string"},
        "id2":{"type": "long"},
        "iddetailCode2": {"type": "string"},
        "amount": {"type": "double"}
      } 
    }
  }
}

和查询应该是

{
"aggs": {
    "nestedName": {
      "nested": {
        "path": "itemDetails"
      },
      "aggs": {
        "Groupby": {
          "terms": {
            "field": "itemDetails.iddetailCode1",
            "size": 50
          },
          "aggs": {
            "amount": {
              "sum": {
                "field": "itemDetails.amount"
              }
            }
          }
        }
      }
    }
  }
}