我是Elasticsearch查询的新手,所以我对如何将此SQL查询转换为Elasticsearch查询感到有点迷失:
SELECT time_interval, type, sum(count)
FROM test
WHERE (&start_date <= t_date <= &end_date)
GROUP BY time_interval, type
我知道我可以使用“范围”查询来设置 gte和lte 的参数,但是如果有更清晰的方法可以做到这一点,那就更好了。提前谢谢!
编辑:
我的弹性搜索设置为索引:“test”,类型为:“summary”,并包含具有几个字段的JSON文档:
t_datetime
t_date
计数
型
* T_ID **
这些JSON文档的ID是与t_id值连接的t_date
答案 0 :(得分:0)
假设t_datetime
与time_interval
相同,您可以使用以下查询:
POST trans/summary/_search?search_type=count
{
"aggs": {
"filtered_results": {
"filter": {
"range": {
"t_date": {
"gte": "2015-05-01",
"lte": "2015-05-30"
}
}
},
"aggs": {
"time_interval_type_groups": {
"terms": {
"script": "doc['t_datetime'].value + '_' + doc['type'].value",
"size": 0
},
"aggs": {
"sum_of_count": {
"sum": {
"field": "count"
}
}
}
}
}
}
}
}
此查询正在使用脚本。在较新版本的Elasticsearch上,默认情况下禁用动态脚本。要启用动态脚本,请按照this。