例如,我的映射有一个属性“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"
}
}
}
}
}
}
答案 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"
}
}
}
}
}
}
}
}