2015-05-29 105 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