2017-10-21 106 views
0

我想得到一個人在五月份住在一個城鎮的天數(Month等於5)。如何計算按天彙總時的空桶數量?

這是我的查詢,但它給我的條目中myindexPersonID等於111Month等於5。例如,該查詢可以給我喜歡90的輸出數量,但也有最大31天每月。

GET myindex/_search? 
{ 
"size":0, 
"query": { 
    "bool": { 
     "must": [ 
     { "match": { 
      "PersonID": "111" 
     }}, 
     { "match": { 
      "Month": "5" 
     }} 
     ] 
    } }, 
    "aggs": { 
    "stay_days": { 
    "terms" : { 
     "field": "Month" 
    } 
    } 
    } 
} 

myindex我有這樣DateTime日期和時間字段,當一個人被一個攝像頭,例如註冊2017-05-01T00:30:08"。因此,在一天內同一人可能會通過相機多次,但它應該計爲1.

如何更新我的查詢,以計算每月的天數而不是用相機捕捉?

+0

你能提供你的映射嗎? – Eli

回答

0

假設你DateTime場叫datetime,要考慮的辦法是DateHistogram聚集:

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "PersonID": "111" 
      } 
     }, 
     { 
      "range": { 
      "datetime": { 
       "gte": "2017-05-01", 
       "lt": "2017-06-01" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggregations": { 
    "my_day_histogram": { 
     "date_histogram": { 
     "field": "datetime", 
     "interval": "1d", 
     "min_doc_count": 1 
     } 
    } 
    } 
} 
  • 注意的是,如此,must子句中我用range長期同datetime場(不是必要的,但你可能會考慮Month字段冗餘)。此外,您可能需要編輯範圍項中的日期格式到您的映射
  • my_day_histogram:通過設置"interval": "1d"將數據劃分爲不同日期的桶。
  • "min_doc_count": 1刪除桶包含零文件。

其他方法,去除範圍/匹配5月,延長直方圖每天都在今年。 這也可以彙總與一個月直方圖像這樣:

"aggregations": { 
    "my_month_histogram": { 
     "date_histogram": { 
     "field": "first_timestamp", 
     "interval": "1M", 
     "min_doc_count": 1 
     }, 
     "aggregations": { 
     "my_day_histogram": { 
      "date_histogram": { 
      "field": "first_timestamp", 
      "interval": "1d" 
      } 
     } 
     } 
    } 
    } 

它清楚,我認爲,在這兩個方面你需要計數指示的天數桶的數量。