我尝试为我的masterthesis评估一个Web应用程序。为此,我想进行用户学习,在elasitc发现中准备数据,并将我的Web应用程序发送给测试人员。据我所知,出于安全原因,弹性发现不允许动态脚本。我尝试重新调整以下动态脚本查询:
GET my_index/document/_search
{
"query": {
"match_all":{}
},
"aggs": {
"stadt": {
"sum": {
"script": "_index['textBody']['frankfurt'].tf()"
}
}
}
}
此查询汇总了文档字段textBody
中术语frankfurt
的所有字词频率。
为了在没有动态脚本的情况下重新构造查询,我已经看了groovy scripts without dynamic scripting,但我仍然得到解析错误。
我的方法是:
GET my_index/document/_search
{
"query": {
"match_all":{}
},
"aggs": {
"stadt": {
"sum": {
"script": {
"script_id": "termFrequency",
"lang" : "groovy",
"params": {
"term" : "frankfurt"
}
}
}
}
}
}
和termFrequency.groovy
目录中的文件scripts
:
_index['textBody'][term].tf()
我收到以下解析错误:
Parse Failure [Unexpected token START_OBJECT in [stadt].]
答案 0 :(得分:1)
这是正确的语法,假设您的文件位于config/scripts
目录中。
{
"query": {
"match_all": {}
},
"aggs": {
"stadt": {
"sum": {
"script_file": "termFrequency",
"lang": "groovy",
"params": {
"term": "frankfurt"
}
}
}
},
"size": 0
}
一词也应该是variable
而不是string
所以它应该是
_index['textBody'][term].tf()
希望这有帮助!