2015-05-29 2 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, но если есть более четкий способ сделать это, это будет еще лучше. Заранее спасибо!

Edit:

Мой elasticsearch настроен, чтобы иметь индекс: "тест" с типом: "Резюме" и содержит JSON документы, которые имеют несколько полей:

t_datetime

t_date

Количество

типа

* t_id **

идентификаторы для этих документов в формате JSON являются t_date сцепляется с t_id ценит

+0

Просьба указать отображение вашего индекса. – bittusarkar

+0

Я не вижу одно и то же имя полей, используемых в вашем SQL-запросе, как в списке полей, упомянутых в вашем редактировании. Можете ли вы изменить свой вопрос, чтобы тип каждого поля, который вы использовали в SQL-запросе, был ясен? – bittusarkar

+0

@bsarkar надеюсь, теперь это яснее! –

ответ

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.

Смежные вопросы