在弹性搜索查询中使用内联脚本中的聚合函数

时间:2016-03-16 09:51:00

标签: elasticsearch groovy

我试图在弹性搜索查询的script_fields部分中使用聚合函数的结果,但是我们无法在查询的此部分中引用聚合结果。理想情况下,我想将聚合字段'MaxProductCount'乘以2来计算'ProductScore',如下所示:

{
  "filter": {
     "bool": {
       "must": [
           {
              "fquery": {
                  "query": {
                     "query_string": {
                        "query": "id = 6436"
                      }
                  }
              }
           }
        ]
     }
  },
  "aggregations" : {
       "MaxProductCount" : { "max" : { "script" : "doc['total'].value" } }
  },
 "script_fields" : {
       "ProductScore" : {
           "script" : "aggregations['MaxProductCount'].value * 2"
       }
   }
} 

错误回复是:

"reason" : {
       "type" : "script_exception",
       "reason" : "failed to run inline script [aggregations['MaxProductCount'].value] using lang [groovy]",
       "caused_by" : {
         "type" : "missing_property_exception",
         "reason" : "No such property: aggregations for class: 1b1aa6e761136e0f4c14b7223dd6639071c21bc4"
       }

有谁知道是否可以在script_fields部分引用聚合结果?

谢谢。

1 个答案:

答案 0 :(得分:0)

简短的回答是,您无法在脚本字段中嵌入聚合。脚本字段是基于对该文档的字段值进行的某些计算而为每个文档创建的合成字段,而聚合是在整个所选文档集上计算的。所以你不能混合和匹配两者。