bucket script not working - elasticsearch 2.4.2

时间:2016-12-07 15:44:11

标签: elasticsearch kibana kibana-4

我试图减去聚合

{
  "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"
          }
        } 
    }  
}

它抛出以下错误

  

" reason":"无效的管道聚合名为[bucket_script]类型的[minus_value]。只允许兄弟管道聚合在顶层"

我已经来回移动 minus_value 节点到aggs节点,但它无法解决我的问题。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分: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"
          }
        }
      }
    }
  }
}