2014-10-28 6 views
0

Имея следующий пример типа в индексе:Упругого поиска

{ 
"_index": "aggs_20141028", 
"_type": "aggobj", 
"_id": "4aNpd7zlR5eTdA7o2I898A", 
"_version": 1, 
"_score": 1, 
"_source": { 
    "UserId": 4, 
    "Created": "2014-10-28T09:40:22.0652362+02:00", 
    "Path": "Path_0", 
    "IntProp1": 1, 
    "IntProp2": 87, 
    "IntProp3": 903, 
    "BoolProp1": false, 
    "BoolProp2": true, 
    "BoolProp3": false, 
    "StringProp1": "StringProp_6", 
    "StringProp2": "StringProp_6", 
    "StringProp3": "StringProp_3" 
    } 
} 

Как агрегировать данные в нем для следующих случаев использования?

  1. Совокупный BoolProp (количество) группы пользователем, TimePeriod (например, день, месяц), фильтр на StartDate
  2. Совокупный BoolProp (количество) группы TimePeriod (например, день, месяц), фильтр на StartDate, идентификатор пользователя
  3. Совокупные BoolProp (количество) группы по ContentProperty, TimePeriod (например, день, месяц), фильтр на StartDate
  4. Совокупный IntProp (сумма) группы по пути, TimePeriod, фильтр на StartDate

Оригинальная документация ES является Цюй ite трудно понять ... http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html

ответ

0

У вас нет начального поля в ваших данных - я предполагаю, что вы имеете в виду Созданный? Также у вас есть три поля BoolProp, которые являются все логическими - неясно, как вы хотите их подсчитать, например. вы считаете, присутствуют ли они, правда и т. д.?

Поле размера будет зависеть от размера ваших данных и потребует настройки.

Вот как я бы подойти к первому требование:

curl -XGET 'http://localhost:9200/aggs_20141028/aggobj/_search?pretty' -d '{ 
    "aggs": { 
    "date_filter_agg": { 
     "filter" : { 
      "term": { "Created": "2014-10-28T09:40:22.0652362+02:00" }}, 
     "aggs" : { 
     "user_agg" : { 
     "terms": {"size": 0, "field" : "UserId"}, 
     "aggs" : { 
      "date_agg": { 
       "date_histogram" : { "field" : "Created", "interval" : "month" }, 
       "aggs" : { 
        "BoolProp_count": {"sum" : {"script" : "(doc[\"BoolProp1\"].value == \"T\" ? 1 : 0) + (doc[\"BoolProp2\"].value == \"T\" ? 1 : 0) + (doc[\"BoolProp3\"].value == \"T\" ? 1 : 0)"} } }} 
}}}}}}}' 

ключевых вещам, чтобы отметить -

  1. дата фильтр появляется первым и выполняемый по всем результатам поиска.
  2. результаты группируются по UserId затем сгруппированных по Created данных в
  3. ежемесячных ведер Последнее поле является вычисление значения вы хотите
  4. возвращаемое значение является последним, то есть графа истинных полей BoolProp.

Ответы на другие требования должны быть очень похожими.

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