2014-10-28 81 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(例如天,月),在開始日期濾波器
  2. 骨料BoolProp(計數)組TIMEPERIOD(例如天,月),在開始日期過濾器,用戶id
  3. 骨料BoolProp(計數)由contentproperty基,TIMEPERIOD(例如天,月),在開始日期濾波器
  4. 骨料IntProp(總和)通過路徑,TIMEPERIOD基,上STARTDATE濾波器

原始ES文檔是曲ite很難理解... http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html

回答

0

您的數據中沒有字段startdate - 我假設您的意思是創建? 另外你還有三個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. 結果,然後由用戶ID,然後通過創建數據
  3. 每月桶分組分組最後一個字段是值的計算你想
  4. 返回值是最後一個,即真正的BoolProp領域的計數。

其他要求的答案應該非常相似。