Elasticsearch:在聚合中访问 IndexedScript

Elasticsearch: Accessing IndexedScript in aggregation

ES 提供了将脚本存储在内部索引中的可能性(参见 IndexedScript ),但不幸的是我无法从聚合中访问它。

正在创建索引:

POST /_scripts/groovy/termFrequency
{
  "script": "_index['textBody'][term].tf()"
}

在聚合中使用脚本:

GET /my_index/_search
{
   "query":{
      "match_all": {}
   },
   "aggs":{
      "tf_sum":{
        "sum":{
          "script": {
            "script": "termFrequency",
            "lang": "groovy",
            "params": {"term":"keyword"}
          }
        }
      }
   }
}

导致语法错误:Parse Failure [Unexpected token START_OBJECT in [tf_sum].

脚本的目的是提取词频。我不想使用script_files,因为上传这样的文件在云服务中很昂贵(例如found)。

这是 ES 1.7 的正确语法,您正在查看 ES 2.1

GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "tf_sum": {
      "sum": {
        "script_id": "termFrequency", <--- you access it with script_id
        "lang": "groovy",
        "params": {
          "term": "keyword"
        }
      }
    }
  },
  "size": 0
}

希望对您有所帮助!