2015-05-29 104 views
0

我是新来Elasticsearch查询,所以我有点失去了对如何将这些SQL查询转换为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,但是如果有更清晰的方法可以做到这一点,那会更好。提前致谢!

编辑:

我elasticsearch是设置有一个指标:,类型为 “测试”“摘要”,并包含有几个领域JSON文件:

t_datetime

t_date

计数

* T_ID **

的是与T_ID级联的t_date值

+0

请提及您的索引映射。 – bittusarkar

+0

我没有在您的SQL查询中使用的字段名称与您在编辑中提到的字段列表中的字段名称相同。你可以编辑你的问题,以便你在SQL查询中使用的每个字段的类型是清楚的吗? – bittusarkar

+0

@bsarkar希望它现在更清晰! –

回答

0

假设这些JSON文件的ID,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