没有动态脚本的术语频率的汇总脚本

时间:2015-11-27 11:18:02

标签: elasticsearch groovy

我尝试为我的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].]

1 个答案:

答案 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()

希望这有帮助!