我是Elastic Search的新手,我正在尝试创建一个没有太多成功的请求。以下是用例:
我们假设我有4个文档,其中有amount
字段:
[
{
"id": 541436748332,
"amount": 5,
"date": "2017-01-01"
},
{
"id": 6348643512,
"amount": 2,
"date": "2017-03-13"
},
{
"id": 343687432,
"amount": 2,
"date": "2017-03-14"
},
{
"id": 6457866181,
"amount": 7,
"date": "2017-05-21"
}
]
以下是我想得到的结果:
{
"aggregations": {
"my_aggregation": {
"buckets": [
{
"doc_count": 2,
"sum": 7
},
{
"doc_count": 2,
"sum": 9
}
]
}
}
}
正如你所看到的,我想要某种直方图,但我想设置一个“文档”间隔,而不是设置日期间隔。所以在这里,每个桶将有2个文档,以及这两个文档的字段amount
的总和。
有人知道这是否可能?这也意味着按日期对记录进行排序,例如,获得想要的结果
编辑:关于用例的更多解释:
真实用例是我想要打印的折线图。但是我想让X轴成为销售数量,而在Y中则是这些销售额的总数$$$。而且我不想在我的图表上打印数千个点,我想要更少的点,这就是为什么我希望处理桶和总和...... 我给出的响应示例只是我想要实现的第一步,第二步是将每个字段添加到其后面的那一个:
{
"aggregations": {
"my_aggregation": {
"buckets": [
{
"doc_count": 2,
"sum": 7
},
{
"doc_count": 2,
"sum": 16
}
]
}
}
}
(7 = 5 + 2); (16 = 7(从上次结果)+ 2 + 7);
答案 0 :(得分:0)
{
"size": 0,
"aggs": {
"prices": {
"histogram": {
"field": "id",
"interval": 2,
"offset": 1
},
"aggs": {
"total_amount": {
"sum": {
"field": "amount"
}
}
}
}
}
}
(如果你想让第一个桶从1开始而不是0开始,则需要offset
1.)然后你会得到这样的响应:
{
"aggregations": {
"prices": {
"buckets": [
{
"key": 1,
"doc_count": 2,
"total_amount": {
"value": 7
}
},
{
"key": 3,
"doc_count": 2,
"total_amount": {
"value": 9
}
}
]
}
}
}
不需要排序,因为默认顺序是您想要的顺序。但是,如果您想要对存储桶进行不同的排序,还会有order
参数。