【问题标题】:elastic search sum aggregate only on matched document idelasticsearch sum 聚合仅在匹配的文档 id 上
【发布时间】:2020-08-06 05:20:59
【问题描述】:

我是 elasticsearch 的新手,我的文档中有两个具有唯一 ID 的文档,当 exceptionId 为 1 时它是 exceptionId,然后它正确返回文档 1 的总和聚合,但如果我想要两个文档的总和聚合,如果我的输入是 exceptionId 1 和 2,然后 elasticsearch 将对两个文档进行求和,并在我的情况下返回匹配输入的结果,相应的文档总和聚合应该返回,当输入是多个时,聚合应该是多个。

这是映射。

{
    "mappings": {
        "recommendations": {
            "properties": {
                "events": {
                    "type": "nested",
                    "properties": {
                        "recommendationData": {
                            "type": "nested",
                            "properties": {
                                "recommendations": {
                                    "type": "nested",
                                    "properties": {
                                        "recommendationType": {
                                            "type": "keyword"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

这是 exceptionId 为“1”的文档

{
    "clusterId": "1",
    "rank": 1,
    "events": [
        {
            "eventId": "1",
            "eventType": "Delayed",
            "metaInfo": {
                "batch_id": "batch_1"
            },
            "recommendationData": [
                {
                    "exceptionId": "1",
                    "item": "KitKat",
                    "location": "DC1",
                    "dueDate": "2019-01-10T05:30:00.000+0530",
                    "quantity": 100,
                    "metaInfo": {
                        "batch_id": "batch_1",
                        "dummy_id": "dummy_1"
                    },
                    "rank": 1,
                    "recommendations": [
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Air",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        }
                    ]
                }
            ]
        }
    ]
}

这是 exceptionId 为“2”的文档

{
    "clusterId": "2",
    "rank": 2,
    "events": [
        {
            "eventId": "2",
            "eventType": "Delayed",
            "metaInfo": {
                "batch_id": "batch_1"
            },
            "recommendationData": [
                {
                    "exceptionId": "2",
                    "item": "KitKat",
                    "location": "DC1",
                    "dueDate": "2019-01-10T05:30:00.000+0530",
                    "quantity": 100,
                    "metaInfo": {
                        "batch_id": "batch_1",
                        "dummy_id": "dummy_1"
                    },
                    "rank": 1,
                    "recommendations": [
                        {
                            "rank": 1,
                            "recommendationType": "Out Of Stock",
                            "customerName": "Walmart",
                            "stockTransfer": {
                                "primaryRecommendation": true,
                                "priority": 1,
                                "sourceLocation": "DC1",
                                "transferQuantity": 100,
                                "metaInfo": 40,
                                "shipDate": "01/01/2020",
                                "arrivalDate": "10/01/2020",
                                "transportMode": "Air",
                                "transferCost": 1000,
                                "maxQtyAvailableForTransfer": 40,
                                "totalQtyAtSource": 1,
                                "revenueRecovered": 12000
                            },
                            "expedite": null
                        }
                    ]
                }
            ]
        }
    ]
}

这是我尝试过的查询

{
    "aggregations": {
        "recommendations": {
            "nested": {
                "path": "events.recommendationData"
            },
            "aggregations": {
                "exceptionId": {
                    "filter": {
                        "terms": {
                            "events.recommendationData.exceptionId": [
                                "1", "2"
                            ],
                            "boost": 1
                        }
                    },
                    "aggregations": {
                        "by_item": {
                            "terms": {
                                "field": "events.recommendationData.item.keyword",
                                "size": 10,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            },
                            "aggregations": {
                                "by_destination": {
                                    "terms": {
                                        "field": "events.recommendationData.location.keyword",
                                        "size": 10,
                                        "min_doc_count": 1,
                                        "shard_min_doc_count": 0,
                                        "show_term_doc_count_error": false,
                                        "order": [
                                            {
                                                "_count": "desc"
                                            },
                                            {
                                                "_key": "asc"
                                            }
                                        ]
                                    },
                                    "aggregations": {
                                        "recommendations": {
                                            "nested": {
                                                "path": "events.recommendationData.recommendations"
                                            },
                                            "aggregations": {
                                                "by_trans": {
                                                    "terms": {
                                                        "field": "events.recommendationData.recommendations.stockTransfer.transportMode.keyword",
                                                        "size": 10,
                                                        "min_doc_count": 1,
                                                        "shard_min_doc_count": 0,
                                                        "show_term_doc_count_error": false,
                                                        "order": [
                                                            {
                                                                "_count": "desc"
                                                            },
                                                            {
                                                                "_key": "asc"
                                                            }
                                                        ]
                                                    },
                                                    "aggregations": {
                                                        "by_sourcelocation": {
                                                            "terms": {
                                                                "field": "events.recommendationData.recommendations.stockTransfer.sourceLocation.keyword",
                                                                "size": 10,
                                                                "min_doc_count": 1,
                                                                "shard_min_doc_count": 0,
                                                                "show_term_doc_count_error": false,
                                                                "order": [
                                                                    {
                                                                        "_count": "desc"
                                                                    },
                                                                    {
                                                                        "_key": "asc"
                                                                    }
                                                                ]
                                                            },
                                                            "aggregations": {
                                                                "by_shipdate": {
                                                                    "terms": {
                                                                        "field": "events.recommendationData.recommendations.stockTransfer.shipDate.keyword",
                                                                        "size": 10,
                                                                        "min_doc_count": 1,
                                                                        "shard_min_doc_count": 0,
                                                                        "show_term_doc_count_error": false,
                                                                        "order": [
                                                                            {
                                                                                "_count": "desc"
                                                                            },
                                                                            {
                                                                                "_key": "asc"
                                                                            }
                                                                        ]
                                                                    },
                                                                    "aggregations": {
                                                                        "by_arrival": {
                                                                            "terms": {
                                                                                "field": "events.recommendationData.recommendations.stockTransfer.arrivalDate.keyword",
                                                                                "size": 10,
                                                                                "min_doc_count": 1,
                                                                                "shard_min_doc_count": 0,
                                                                                "show_term_doc_count_error": false,
                                                                                "order": [
                                                                                    {
                                                                                        "_count": "desc"
                                                                                    },
                                                                                    {
                                                                                        "_key": "asc"
                                                                                    }
                                                                                ]
                                                                            },
                                                                            "aggregations": {
                                                                                "quantity": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.transferQuantity"
                                                                                    }
                                                                                },
                                                                                "transfercost": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.transferCost"
                                                                                    }
                                                                                },
                                                                                "revenueRecovered": {
                                                                                    "sum": {
                                                                                        "field": "events.recommendationData.recommendations.stockTransfer.revenueRecovered"
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

这是这里的输出,它正在对文档 1 和文档 2 进行所有求和

       {
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.0,
        "hits": []
    },
    "aggregations": {
        "recommendations": {
            "doc_count": 2,
            "exceptionId": {
                "doc_count": 2,
                "by_item": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "KitKat",
                            "doc_count": 2,
                            "by_destination": {
                                "doc_count_error_upper_bound": 0,
                                "sum_other_doc_count": 0,
                                "buckets": [
                                    {
                                        "key": "DC1",
                                        "doc_count": 2,
                                        "recommendations": {
                                            "doc_count": 2,
                                            "by_trans": {
                                                "doc_count_error_upper_bound": 0,
                                                "sum_other_doc_count": 0,
                                                "buckets": [
                                                    {
                                                        "key": "Air",
                                                        "doc_count": 2,
                                                        "by_sourcelocation": {
                                                            "doc_count_error_upper_bound": 0,
                                                            "sum_other_doc_count": 0,
                                                            "buckets": [
                                                                {
                                                                    "key": "DC1",
                                                                    "doc_count": 2,
                                                                    "by_shipdate": {
                                                                        "doc_count_error_upper_bound": 0,
                                                                        "sum_other_doc_count": 0,
                                                                        "buckets": [
                                                                            {
                                                                                "key": "01/01/2020",
                                                                                "doc_count": 2,
                                                                                "by_arrival": {
                                                                                    "doc_count_error_upper_bound": 0,
                                                                                    "sum_other_doc_count": 0,
                                                                                    "buckets": [
                                                                                        {
                                                                                            "key": "10/01/2020",
                                                                                            "doc_count": 2,
                                                                                            "quantity": {
                                                                                                "value": 200.0
                                                                                            },
                                                                                            "transfercost": {
                                                                                                "value": 2000.0
                                                                                            },
                                                                                            "revenueRecovered": {
                                                                                                "value": 24000.0
                                                                                            }
                                                                                        }
                                                                                    ]
                                                                                }
                                                                            }
                                                                        ]
                                                                    }
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }
}

【问题讨论】:

    标签: elasticsearch elastic-stack elasticsearch-aggregation


    【解决方案1】:

    根据我对您要求的理解,您需要对“exceptionId”进行术语聚合 让我知道这是否适合您 查询:

    {
      "aggregations": {
        "recommendations": {
          "nested": {
            "path": "events.recommendationData"
          },
          "aggregations": {
            "exceptionId": {
              "filter": {
                "terms": {
                  "events.recommendationData.exceptionId": [
                    "1",
                    "2"
                  ],
                  "boost": 1
                }
              },
              "aggregations": {
                "exceptionId": {
                  "terms": {
                    "field": "events.recommendationData.exceptionId.keyword",
                    "size": 10
                  },
                  "aggregations": {
                    "by_item": {
                      "terms": {
                        "field": "events.recommendationData.item.keyword",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                          {
                            "_count": "desc"
                          },
                          {
                            "_key": "asc"
                          }
                        ]
                      },
                      "aggregations": {
                        "by_destination": {
                          "terms": {
                            "field": "events.recommendationData.location.keyword",
                            "size": 10,
                            "min_doc_count": 1,
                            "shard_min_doc_count": 0,
                            "show_term_doc_count_error": false,
                            "order": [
                              {
                                "_count": "desc"
                              },
                              {
                                "_key": "asc"
                              }
                            ]
                          },
                          "aggregations": {
                            "recommendations": {
                              "nested": {
                                "path": "events.recommendationData.recommendations"
                              },
                              "aggregations": {
                                "by_trans": {
                                  "terms": {
                                    "field": "events.recommendationData.recommendations.stockTransfer.transportMode.keyword",
                                    "size": 10,
                                    "min_doc_count": 1,
                                    "shard_min_doc_count": 0,
                                    "show_term_doc_count_error": false,
                                    "order": [
                                      {
                                        "_count": "desc"
                                      },
                                      {
                                        "_key": "asc"
                                      }
                                    ]
                                  },
                                  "aggregations": {
                                    "by_sourcelocation": {
                                      "terms": {
                                        "field": "events.recommendationData.recommendations.stockTransfer.sourceLocation.keyword",
                                        "size": 10,
                                        "min_doc_count": 1,
                                        "shard_min_doc_count": 0,
                                        "show_term_doc_count_error": false,
                                        "order": [
                                          {
                                            "_count": "desc"
                                          },
                                          {
                                            "_key": "asc"
                                          }
                                        ]
                                      },
                                      "aggregations": {
                                        "by_shipdate": {
                                          "terms": {
                                            "field": "events.recommendationData.recommendations.stockTransfer.shipDate.keyword",
                                            "size": 10,
                                            "min_doc_count": 1,
                                            "shard_min_doc_count": 0,
                                            "show_term_doc_count_error": false,
                                            "order": [
                                              {
                                                "_count": "desc"
                                              },
                                              {
                                                "_key": "asc"
                                              }
                                            ]
                                          },
                                          "aggregations": {
                                            "by_arrival": {
                                              "terms": {
                                                "field": "events.recommendationData.recommendations.stockTransfer.arrivalDate.keyword",
                                                "size": 10,
                                                "min_doc_count": 1,
                                                "shard_min_doc_count": 0,
                                                "show_term_doc_count_error": false,
                                                "order": [
                                                  {
                                                    "_count": "desc"
                                                  },
                                                  {
                                                    "_key": "asc"
                                                  }
                                                ]
                                              },
                                              "aggregations": {
                                                "quantity": {
                                                  "sum": {
                                                    "field": "events.recommendationData.recommendations.stockTransfer.transferQuantity"
                                                  }
                                                },
                                                "transfercost": {
                                                  "sum": {
                                                    "field": "events.recommendationData.recommendations.stockTransfer.transferCost"
                                                  }
                                                },
                                                "revenueRecovered": {
                                                  "sum": {
                                                    "field": "events.recommendationData.recommendations.stockTransfer.revenueRecovered"
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    结果:

    "aggregations" : {
        "recommendations" : {
          "doc_count" : 1,
          "exceptionId" : {
            "doc_count" : 1,
            "exceptionId" : {
              "doc_count_error_upper_bound" : 0,
              "sum_other_doc_count" : 0,
              "buckets" : [
                {
                  "key" : "1",
                  "doc_count" : 1,
                  "by_item" : {
                    "doc_count_error_upper_bound" : 0,
                    "sum_other_doc_count" : 0,
                    "buckets" : [
                      {
                        "key" : "KitKat",
                        "doc_count" : 1,
                        "by_destination" : {
                          "doc_count_error_upper_bound" : 0,
                          "sum_other_doc_count" : 0,
                          "buckets" : [
                            {
                              "key" : "DC1",
                              "doc_count" : 1,
                              "recommendations" : {
                                "doc_count" : 1,
                                "by_trans" : {
                                  "doc_count_error_upper_bound" : 0,
                                  "sum_other_doc_count" : 0,
                                  "buckets" : [
                                    {
                                      "key" : "Air",
                                      "doc_count" : 1,
                                      "by_sourcelocation" : {
                                        "doc_count_error_upper_bound" : 0,
                                        "sum_other_doc_count" : 0,
                                        "buckets" : [
                                          {
                                            "key" : "DC1",
                                            "doc_count" : 1,
                                            "by_shipdate" : {
                                              "doc_count_error_upper_bound" : 0,
                                              "sum_other_doc_count" : 0,
                                              "buckets" : [
                                                {
                                                  "key" : "01/01/2020",
                                                  "doc_count" : 1,
                                                  "by_arrival" : {
                                                    "doc_count_error_upper_bound" : 0,
                                                    "sum_other_doc_count" : 0,
                                                    "buckets" : [
                                                      {
                                                        "key" : "10/01/2020",
                                                        "doc_count" : 1,
                                                        "quantity" : {
                                                          "value" : 100.0
                                                        },
                                                        "transfercost" : {
                                                          "value" : 1000.0
                                                        },
                                                        "revenueRecovered" : {
                                                          "value" : 12000.0
                                                        }
                                                      }
                                                    ]
                                                  }
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    

    【讨论】:

    • 是的,杰斯普雷特!确实我确实需要这个...谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2015-07-02
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多