2017-05-12 52 views
1

我想過濾空間桶過濾器聚集塊,並從彈性搜索中得到一個錯誤。沒有這種反應是巨大的,因爲我查詢大量度量和嵌套聚合(這是爲了簡化較大查詢的一部分)bucket_script內部的過濾器聚集拋出錯誤

GET index/type/_search?ignore_unavailable 
{ 
    "size": 0, 
    "aggs": { 
    "groupby_country": { 
     "terms": { 
     "field": "country", 
     "size": 2000 
     }, 
     "aggs": { 
     "exists__x__filter": { 
      "filter": { 
      "bool": { 
       "filter": [ 
       { 
        "exists": { 
        "field": "x" 
        } 
       } 
       ] 
      } 
      }, 
      "aggs": { 
      "sum": { 
       "sum": { 
       "script": "def val = doc['x'].value; if(val>0) Math.min(val , 20000)" 
       } 
      }, 
      "average_distinct": { 
       "bucket_script": { 
       "buckets_path": { 
        "count": "_count" 
       }, 
       "script": "return params.count " 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

彈性響應:

{ 
    "error": { 
    "root_cause": [], 
    "type": "reduce_search_phase_exception", 
    "reason": "[reduce] ", 
    "phase": "fetch", 
    "grouped": true, 
    "failed_shards": [], 
    "caused_by": { 
     "type": "class_cast_exception", 
     "reason": "org.elasticsearch.search.aggregations.bucket.filter.InternalFilter cannot be cast to org.elasticsearch.search.aggregations.InternalMultiBucketAggregation" 
    } 
    }, 
    "status": 503 
} 

我嘗試要做的是: 如果對於給國家桶,沒有字段x(例如,我國英國 - 2個文檔沒有「x」字段) 不會將國家桶返回給客戶端。

+0

我不明白你想用'bucket_script' ... –

+0

@ AndreiStefan-做什麼我已經添加了一個說明(請告訴我,如果它仍然不清楚) –

回答

0

你需要一個bucket_selector和腳本略有不同AAAND放置在較高的水平:

{ 
    "size": 0, 
    "aggs": { 
    "groupby_country": { 
     "terms": { 
     "field": "country", 
     "size": 2000 
     }, 
     "aggs": { 
     "exists__x__filter": { 
      "filter": { 
      "bool": { 
       "filter": [ 
       { 
        "exists": { 
        "field": "x" 
        } 
       } 
       ] 
      } 
      }, 
      "aggs": { 
      "sum": { 
       "sum": { 
       "script": "def val = doc['x'].value; if(val>0) Math.min(val , 20000)" 
       } 
      } 
      } 
     }, 
     "average_distinct": { 
      "bucket_selector": { 
      "buckets_path": { 
       "count": "exists__x__filter._count" 
      }, 
      "script": "params.count > 0" 
      } 
     } 
     } 
    } 
    } 
} 
+0

非常感謝。你救了我幾個小時... –

+0

呵呵,沒問題:-)。 –

相關問題