elasticsearch 弹性搜索多重聚合
我有两个弹性搜索查询elasticsearch 弹性搜索多重聚合,elasticsearch,elasticsearch,我有两个弹性搜索查询 获取特定日期的交易信息 获取所有日期的交易信息 如何将这两个要求组合成一个查询?我正在努力为这两个相似的需求编写一个单一的查询。请帮我解决这个问题。多谢各位 { "query": { "filtered": { "query": { "match": { "payment_type": "paypal" } }, "filter": { "range": {
{
"query": {
"filtered": {
"query": {
"match": {
"payment_type": "paypal"
}
},
"filter": {
"range": {
"transaction_date": {
"from": "2014-11-10",
"to": "2014-11-10"
}
}
}
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
}
}
}
{
"size": 0,
"query": {
"match": {
"payment_type": "paypal"
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
}
}
}
如果您使用的ES版本低于1.4.0,则可以使用。查询内容如下:
{
"size": 0,
"query": {
"match": {
"payment_type": "paypal"
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
},
"one_day_aggs": {
"filter": {
"range": {
"transaction_date": {
"from": "2014-11-10",
"to": "2014-11-10"
}
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
}
}
}
}
}
{
"size": 0,
"query": {
"match": {
"payment_type": "paypal"
}
},
"aggs": {
"transactions": {
"filters": {
"filters": {
"one_day": {
"range": {
"transaction_date": {
"from": "2014-11-10",
"to": "2014-11-10"
}
}
},
"all_days": {
"match_all": {}
}
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"avg": {
"field": "purchased_post_count"
}
}
}
}
}
}
但是如果您使用的是ES 1.4.0,那么您可以使用使查询更加紧凑。查询内容如下:
{
"size": 0,
"query": {
"match": {
"payment_type": "paypal"
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
},
"one_day_aggs": {
"filter": {
"range": {
"transaction_date": {
"from": "2014-11-10",
"to": "2014-11-10"
}
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"sum": {
"field": "purchased_post_count"
}
}
}
}
}
}
{
"size": 0,
"query": {
"match": {
"payment_type": "paypal"
}
},
"aggs": {
"transactions": {
"filters": {
"filters": {
"one_day": {
"range": {
"transaction_date": {
"from": "2014-11-10",
"to": "2014-11-10"
}
}
},
"all_days": {
"match_all": {}
}
}
},
"aggs": {
"daily_price_sum": {
"sum": {
"field": "price"
}
},
"daily_post_sum": {
"avg": {
"field": "purchased_post_count"
}
}
}
}
}
}
我还看到,您对查询命中率不感兴趣,只对聚合值感兴趣。在这种情况下,您可以通过使用ES 1.4.0中提供的聚合来提高这些聚合的性能。要利用此功能,请按链接中所述启用碎片查询缓存,并将以下参数添加到\u search
操作中:
search\u type=count
谢谢@Mouzer第一次查询对我有用。非常感谢您的帮助和支持。我将检查Shard Query Cache.hi@bittusarkar:是否可以基于任何一个子agg在父聚合中添加“order”子句?例如,如果我想按每日邮政金额的平均值订购?我面临的问题是,我的结果由任何一个子agg汇总,而不是两个子agg汇总……谢谢!不知道多个过滤器的可能性。非常适合我的情况!