2016-05-31 9 views
2

Я новичок в поиске elasticsearch и пытаюсь выполнить запрос, который делает что-то похожее на фильтрацию и группировку.Агрегация ElasticSearch - фильтр и группа по

Я смог фильтровать (используя фильтр) и выполнять группу по запросу с помощью терминов, но не смог создать запрос, который делает оба.

Это мой запрос без группировки

{ 
    "size": 0, 
    "aggs": { 
    "group_by_city": { 
     "filter": { 
      "bool": { 
       "must": [ 
       { 
        "term": { 
        "account": "a" 
        } 
       }, 
       { 
        "term": { 
        "appName": "b" 
        } 
       }, 
       { 
        "range": { 
        "timestamp": { 
         "from": 1464713893304, 
         "to": 1465022700000 
        } 
        } 
       } 
       ] 
      } 
      }, 
     "aggs": { 
     "average_timing": { 
      "avg": { 
      "field": "t.timing1" 
      } 
     } 
     } 
    } 
    } 
} 

Для группирования я использовал:

{ 
    "size": 0, 
    "aggs": { 
    "group_by_country": { 
     "terms": { 
     "field": "country" 
     }, 
     "aggs": { 
     "average_balance": { 
      "avg": { 
      "field": "t.timing1" 
      } 
     } 
     } 
    } 
    } 
} 

Любые идеи, как я могу объединить два?

+0

Показать свой запрос, который не работает. – AndreKR

ответ

1

У нас была аналогичная проблема, когда нам приходилось представлять некоторые аналитики на подмножестве данных из ElasticSearch. Мне удалось решить это, объединив filter и aggs. Исходя из ваших запросов, я мог бы придумать что-то вроде этого:

{ 
    "size": 0, 
    "filter": { 
     "bool": { 
      "must": [ 
       { 
        "term": { "account": "a" } 
       }, 
       { 
        "term": { "appName": "b" } 
       }, 
       { 
        "range": { 
         "timestamp": { 
          "from": 1464713893304, 
          "to": 1465022700000 
         } 
        } 
       } 
      ] 
     } 
    }, 
    "aggs": { 
     "group_by_country": { 
      "terms": { "field": "country" }, 
      "aggs": { 
       "average_balance": { 
        "avg": { 
         "field": "t.timing1" 
        } 
       } 
      } 
     } 
    } 
} 

Я надеюсь, что мое понимание вашей проблемы является правильным, и это поможет вам.

+0

Да, это сделало работу, спасибо! – danieln

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