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
}
希望对您有所帮助!
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
}
希望对您有所帮助!