elasticsearch - 关于唯一记录的最新文档的聚合统计信息

时间:2016-06-09 05:32:46

标签: elasticsearch lucene

大约有300,000个独立用户/客户。我们每个订单都有一个文件,所以我们有几百万份文件。

每个订单文件都是这样的

{{1}}

我需要每个唯一客户记录(customer_id)最新订单的“统计汇总”指标,即每个客户获取最新订单金额并执行统计数据汇总(忽略旧订单)

这在弹性搜索中是否可行?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的要求,以下内容应该有效。由于我们可以访问查询,因此可以执行任何操作来限制数据集。在我的例子中,我只是说时间戳> = 1365440000:

{
    "size": 0,
    "query": {
        "constant_score": {
            "filter": {
                "range": {
                    "timestamp": {
                        "gte": 1365440000
                    }
                }
            }
        }
    },
    "aggs": {
        "customers": {
            "terms": {
                "field": "customer_id"
            },
            "aggs": {
                "order_stats": {
                    "stats": {
                        "field": "order_amount"
                    }
                }
            }
        }
    }
}

结果如下:

{
    "took": 32,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 8,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "customers": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
        {
            "key": 1001,
            "doc_count": 4,
            "order_stats": {
                "count": 4,
                "min": 13,
                "max": 15,
                "avg": 13.875,
                "sum": 55.5
            }
        },
        {
            "key": 1002,
            "doc_count": 4,
            "order_stats": {
                "count": 4,
                "min": 13.5,
                "max": 15.5,
                "avg": 14.625,
                "sum": 58.5
            }
          }
        ]
      }
   }
}

希望它有所帮助。