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
,因为上传此类文件在云服务中很昂贵(例如找到)。
答案 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
}
希望这有帮助!