2016-12-07 37 views
0

我試圖減去聚合鬥腳本 - elasticsearch 2.4.2

{ 
    "query": { 
    "match_all": {} 
    }, 
    "size": 0, 
    "aggs": { 
     "total_query_id": { 
      "sum": { 
      "field": "query_id" 
      } 
     }, 

     "total_num_results": { 
     "sum": { 
      "field": "num_results" 
     } 
    },    
    "minus_value": { 
      "bucket_script": { 
      "buckets_path": { 
       "qid": "total_query_id", 
       "nrs": "total_num_results" 
      }, 
      "script": "qid - nrs" 
      } 
     } 
    } 
} 

它拋出下面的錯誤

「理由」:「名爲[minus_value]的無效管道聚集類型[bucket_script]。只有同級管道聚合被允許在頂層「

我已經移動到來回m inus_value節點到aggs節點,但它不能解決我的問題。

任何人都可以幫助我嗎?

+1

您曾經試圖將它們包裝全部'全局{}'聚集裏面? – Val

+0

你是什麼意思?如果沒有'minus_value'節點,它將返回兩個聚合值,但是當我嘗試使用桶腳本減去這些值時,會引發錯誤。由我新來這可能是缺乏你問什麼 –

+0

這個想法是管道聚合必須在父桶集合工作。在你的例子中情況並非如此,所以你必須有一個父集合(例如[因爲你有一個'match_all'查詢] [嘗試'全局'](https://www.elastic.co/guide/en/elasticsearch/reference /current/search-aggregations-bucket-global-aggregation.html))並在其中嵌入3個聚合。 – Val

回答

1

這個想法是管道聚合必須在父桶聚合上工作。

在你的例子中情況並非如此,所以你必須有一個父聚合。既然你有一個match_all查詢,你可以嘗試使用global水桶聚集,然後嵌入您的3個聚合裏面,像這樣:

{ 
    "query": { 
    "match_all": {} 
    }, 
    "size": 0, 
    "aggs": { 
    "all": { 
     "global": {}, 
     "aggs": { 
     "total_query_id": { 
      "sum": { 
      "field": "query_id" 
      } 
     }, 
     "total_num_results": { 
      "sum": { 
      "field": "num_results" 
      } 
     }, 
     "minus_value": { 
      "bucket_script": { 
      "buckets_path": { 
       "qid": "total_query_id", 
       "nrs": "total_num_results" 
      }, 
      "script": "qid - nrs" 
      } 
     } 
     } 
    } 
    } 
} 
+0

謝謝!我明天會回到你身邊 –

+0

有沒有這樣的運氣? – Val

+0

我會回到你的哥們。我有緊張的工作。給我一段時間來試驗後,我接受你的答案:-) –