2013-04-04 7 views
2

Рассмотрите журнал событий, хранящийся в ElasticSearch. События выглядят так:Объединение диапазона и фильтра гистограммы в ElasticSearch

{ 
    "timestamp": "2013-04-04T15:38:17Z", 
    "color": "red" 
} 

{ 
    "timestamp": "2013-04-04T17:51:21Z", 
    "color": "green" 
} 

Я хочу нарисовать частоту временного интервала для каждого цвета. Я знаю, что я могу получить временные рамки с двумя запросами, как это:

{ 
    "query": { 
    "match": { 
     "color": "red" 
    } 
    }, 
    "size": 0, 
    "facets": { 
    "freq": { 
     "date_histogram": { 
     "interval": "day", 
     "field": "timestamp" 
     } 
    } 
    } 
} 

Второй запрос будет "match": { "color": "green" }.

Может ли я комбинировать эти запросы в одно целое, что дает мое либо

  • количеству (цвет)/день/ведро
  • или один фацет на цвет, содержащее гистограмму для этого цвета?

Для двух цветов отдельные запросы могут работать нормально, но, как вы могли подозревать, это пример. Я действительно имею дело с более чем десяти цветами, и на данный момент один запрос будет действительно приятным.

ответ

4

Вы можете комбинировать грани для различных цветов в тот же запрос с использованием facet_filter:

{ 
    "facets": { 
     "freq_red": { 
      "date_histogram": { 
       "interval": "day", 
       "field": "timestamp" 
      }, 
      "facet_filter": { 
       "term": { 
        "color": "red" 
       } 
      } 
     }, 
     "freq_green": { 
      "date_histogram": { 
       "interval": "day", 
       "field": "timestamp" 
      }, 
      "facet_filter": { 
       "term": { 
        "color": "green" 
       } 
      } 
     } 
    } 
} 
+0

Спасибо, я должен пропустить, что в документации. Есть ли способ запустить один грань для каждого цвета, не зная (или глядя вверх), какие цвета есть? – Peter

+0

@Peter: Sure TermsFacet позволяет делать огранку на каждый срок, не зная условий заранее. Здесь термин будет цветом. http://www.elasticsearch.org/guide/reference/api/search/facets/terms-facet/ –

+0

Да, термины facet вернут вам список терминов без гистограмм, которые впоследствии могут быть использованы для выполнения описанного многогранного вопроса о гранях гистограммы выше. Но я не могу придумать способ выполнить оба из них в одном запросе на данный момент. – imotov