如何将此SQL查询转换为Elasticsearch查询?

时间:2015-05-29 15:08:06

标签: mysql sql sql-server elasticsearch

我是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

1 个答案:

答案 0 :(得分:0)

假设t_datetimetime_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