2016-07-07 13 views
0

集計を使用して弾性検索クエリを実行していますが、これを100レコードに制限します。問題は、「サイズ」フィルタを適用しても、集計に影響がないことです。あなたは凝集が実行されることになっているレコードを制限するには影響がありません見ることができるように弾性検索集計されたレコードを制限する

GET /index_name/index_type/_search 
{ 
    "size":0, 
    "query":{ 
    "match_all": {} 
    }, 
    "aggregations":{ 
    "courier_code" : { 
     "terms" : { 
     "field" : "city" 
     } 
    } 
}} 

結果セットが

{ 
    "took": 7, 
    "timed_out": false, 
    "_shards": { 
    "total": 10, 
    "successful": 10, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 10867, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "city": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": "Mumbai", 
      "doc_count": 2706 
     }, 
     { 
      "key": "London", 
      "doc_count": 2700 
     }, 
     { 
      "key": "Patna", 
      "doc_count": 1800 
     }, 
     { 
      "key": "New York", 
      "doc_count": 1800 
     }, 
     { 
      "key": "Melbourne", 
      "doc_count": 900 
     } 
     ] 
    } 
    } 
} 

です。 Elastic Searchに上位100レコードというフィルターがありますか?

答えて

1

elasticsearchの検索操作は、2つのフェーズqueryfetchで実行されます。最初の段階では、elasticsearchはすべてのシャードの結果を取得し、どのレコードを返すべきかを決定します。これらのレコードは、第2段階で取り出されます。 sizeパラメーターは、応答で返されるレコードの数を制御します。集約は、elasticsearchが実際に検索する必要があるレコードを知る前の最初のフェーズで実行され、検索のすべてのレコードで常に実行されます。したがって、結果の合計数で制限することはできません。集計実行の範囲を制限する場合は、検索パラメータを変更する代わりに検索クエリを制限する必要があります。たとえば、昨年のレコードのみを含むフィルタを検索クエリに追加すると、このフィルタで集約が実行されます。

それはしかし、あなたはレコードが含まれ、どのレコードが結果に含まれないであろうに制御することはできませんので、このう、terminate_afterパラメータを使用してに各シャードを分析されたレコードの数を制限することも可能ですオプションはあなたが望むものではない可能性が最も高いです。

関連する問題