Elasticsearch:在聚合中访问IndexedScript

时间:2015-12-22 14:51:40

标签: elasticsearch aggregation

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

创建索引:

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

在aggreagtions中使用脚本:

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,因为上传此类文件在云服务中很昂贵(例如找到)。

1 个答案:

答案 0 :(得分:1)

这是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
}

希望这有帮助!