2017-09-26 5 views
0

私はelasticsearchでクエリを実行しています。インデックスに表示されている各月の属性 "end_date_ut"(タイプは日付で、フォーマットはdateOptionalTime)のヒット数を取得する必要があります。 そのために、私はdate_histogram集約を使用しています。ちょうど怒鳴るdate_histogramアグリゲーションにサイズを入れる方法

マイクエリ:

GET inc/_search 
{ 
    "size": 0, 
    "aggs": { 
    "appli": { 
     "date_histogram": { 
     "field": "end_date_ut", 
     "interval": "month" 
     } 
    } 
    } 
} 

そして、ここでは結果の一部です:

"hits": { 
    "total": 517478, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "appli": { 
     "buckets": [ 
     { 
      "key_as_string": "2009-08-01T00:00:00.000Z", 
      "key": 1249084800000, 
      "doc_count": 0 
     }, 
     { 
      "key_as_string": "2009-09-01T00:00:00.000Z", 
      "key": 1251763200000, 
      "doc_count": 1 
     }, 
     { 
      "key_as_string": "2009-10-01T00:00:00.000Z", 
      "key": 1254355200000, 
      "doc_count": 2362 
     }, 
     { 
      "key_as_string": "2009-11-01T00:00:00.000Z", 
      "key": 1257033600000, 
      "doc_count": 5336 
     }, 
     { 
      "key_as_string": "2009-12-01T00:00:00.000Z", 
      "key": 1259625600000, 
      "doc_count": 7536 
     }, 
     { 
      "key_as_string": "2010-01-01T00:00:00.000Z", 
      "key": 1262304000000, 
      "doc_count": 8864 
     } 

は、問題は、私はあまりにも多くのバケット(結果を)持っているということです。 「用語集合」を使用しているときは、サイズを設定できるので問題はありませんが、「date_histogram aggregation」ではクエリ結果に制限を付ける方法が見つかりません。

+0

'date_aggregation'が実行される時間間隔を制限するために' range'クエリを追加する必要があります。 – Val

+0

これは良い解決策ですが、私は時間間隔を制限したくありません。 20の最初の結果しか得られない別の方法はありますか? –

+1

'min_doc_count'を使ってデータを持つバケットのみを含めることができます。つまり、0のドキュメントを持つバケットは応答に戻ってこないでしょう。 – Val

答えて

0

min_doc_countを使用してデータを持つバケットのみを含めることをお勧めします。つまり、0個のドキュメントを含むバケットは応答に戻ってこないでしょう。

GET inc/_search 
{ 
    "size": 0, 
    "aggs": { 
    "appli": { 
     "date_histogram": { 
     "field": "end_date_ut", 
     "interval": "month", 
     "min_doc_count": 1   <--- add this 
     } 
    } 
    } 
} 

することができます場合は、集約が実行されている時間間隔を抑制するためにrangeクエリを追加することができます。

関連する問題