2015-09-21 41 views
2

我在elasticsearch(版本:1.7.1)中遇到了一個混淆。根據文檔https://www.elastic.co/guide/en/elasticsearch/guide/current/_filtering_queries_and_aggregations.html,應用於查詢的過濾器也將應用於聚合。當我發出以下查詢時,我收到了意想不到的結果。Elasticsearch範圍過濾器不能在日期直方圖中工作

{ 
    "aggregations": { 
    "outer": { 
     "aggregations": { 
     "inner": { 
      "date_histogram": { 
      "extended_bounds": { 
       "min": 0 
      }, 
      "field": "time", 
      "interval": "30d", 
      "min_doc_count": 0, 
      "order": { 
       "_key": "desc" 
      } 
      } 
     } 
     }, 
     "terms": { 
     "field": "ad_id", 
     "size": 10 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "and": { 
      "filters": [ 
      { 
       "range": { 
       "time": { 
        "from": 1441619173000, 
        "include_lower": false, 
        "include_upper": true, 
        "to": 1442835370000 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

結果的一部分在這裏。

{ 
    "buckets": [ 
    { 
     "key": 203737, 
     "doc_count": 27, 
     "inner": { 
     "buckets": [ 
      { 
      "key_as_string": "2015-09-02T00:00:00.000Z", 
      "key": 1441152000000, 
      "doc_count": 27 
      }, 
      { 
      "key_as_string": "1970-01-31T00:00:00.000Z", 
      "key": 2592000000, 
      "doc_count": 0 
      }, 

      ... 
      { 
      "key_as_string": "1970-01-01T00:00:00.000Z", 
      "key": 0, 
      "doc_count": 0 
      } 
     ] 
     } 
    } 
    ] 
} 

請注意,聚集結果包括我已經申請範圍外鍵。時間字段的類型是日期。我也嘗試了下面的查詢,但結果是一樣的。

{ 
    "aggs": { 
    "outer_filter": { 
     "filter": { 
     "and": { 
      "filters": [ 
      { 
       "range": { 
       "time": { 
        "from": 1441619173000, 
        "include_lower": false, 
        "include_upper": true, 
        "to": 1442835370000 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "aggs": { 
     "outer_term": { 
      "terms": { 
      "field": "ad_id", 
      "size": 10 
      }, 
      "aggs": { 
      "inner": { 
       "date_histogram": { 
       "extended_bounds": { 
        "min": 0 
       }, 
       "field": "time", 
       "interval": "30d", 
       "min_doc_count": 0, 
       "order": { 
        "_key": "desc" 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

我的問題是,聚合結果包括( 「來自」:1441619173000, 「到」:1442835370000)的過濾器外的結果。

爲什麼過濾器沒有得到應用? 任何人都可以幫忙。

回答

1

'extended_bound'min value is the problem。由於min是0並且該字段的類型是date,所以bucket自1970開始。

0

您似乎有範圍過濾器與範圍聚合混淆。

範圍過濾器採用兩種類型的參數,gte或gt(大於)和lte或lt(小於)。

from/to參數用於範圍聚合,用於將結果拆分爲用戶定義的桶。

+0

感謝您的回覆。我嘗試過'gte'和'lte'的範圍過濾器。但仍然令人失望。另一個線索(可能是)我已經存儲了毫秒的時間。它可以導致任何問題? –