Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 弹性搜索:如何编写多语句脚本?_Groovy_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Groovy,elasticsearch" /> elasticsearch,Groovy,elasticsearch" />

Groovy 弹性搜索:如何编写多语句脚本?

Groovy 弹性搜索:如何编写多语句脚本?,groovy,elasticsearch,Groovy,elasticsearch,我将值存储在Elasticsearch索引中的文档中。 我需要对这些值进行一些日期操作,并返回一个布尔值,以便在筛选器中使用。 脚本包含了好几行,我无法运行它 我还编写了其他一些工作正常的脚本,但是我对Groovy知之甚少,对弹性搜索知之甚少 我能找到的每一个脚本样本都有一行,而且只有一行 那么基本上,我该如何处理这个完全有效的脚本呢 "script": { "script": "doc['state'].value == 'completed' && doc['last

我将值存储在Elasticsearch索引中的文档中。
我需要对这些值进行一些日期操作,并返回一个布尔值,以便在筛选器中使用。
脚本包含了好几行,我无法运行它

我还编写了其他一些工作正常的脚本,但是我对Groovy知之甚少,对弹性搜索知之甚少

我能找到的每一个脚本样本都有一行,而且只有一行

那么基本上,我该如何处理这个完全有效的脚本呢

"script": {
    "script": "doc['state'].value == 'completed' && doc['lastStateUpdate'].value < doc['dueDate'].value"
    }
“脚本”:{
“脚本”:“doc['state'].value=='completed'和&doc['lastStateUpdate'].value
把它变成像这样的东西

"script": {
    "script": "def isCompleted = doc['state'].value == 'completed' 
               def preSLA = doc['lastStateUpdate'].value < doc['dueDate'].value
               return isCompleted && preSLA"
    }
“脚本”:{
“脚本”:“def isCompleted=doc['state']。值=='completed'
def preSLA=doc['lastStateUpdate']。值
我对创建一个只写一行代码来表达逻辑的想法不感兴趣,我可以看到更多这样的代码,虽然这一行代码相对简单,但“一行代码”并不能解决这个问题


另一种方法是在索引文档之前对其进行一些预处理,并向其添加额外的数据。但是,这也有缺点,因为它相当不灵活,我们需要重新索引所有数据以更改这些聚合,而我们不希望这样做。

您只需要用分号分隔每条语句:

"script": {
    "script": "isCompleted = doc['state'].value == 'completed'; preSLA = doc['lastStateUpdate'].value < doc['dueDate'].value; return isCompleted && preSLA;"
    }
“脚本”:{
“脚本”:“isCompleted=doc['state']。值=='completed';preSLA=doc['lastStateUpdate']。值

但是,请确保不要在脚本字符串中添加换行符,因为它不是有效的JSON。

如果要将脚本拆分为多行,则必须使用
“”“

“查询”:{ “功能评分”:{ “脚本_分数”:{ “脚本”:{ “郎”:“无痛”, “来源”:” int-total=0; 对于(int i=0;i
更新:对于Elasticsearch的某些版本,
源代码应替换为
内联

谢谢,如果您删除
定义,我会将其标记为正确答案(它们不适用).Thank:)很酷,完成了,谢谢!可能你的脚本语言不是groovy。嗨,我尝试了那个脚本,但不起作用,并返回编译错误。这是我的问题,这只在
Kibana
控制台中起作用,你不能在
Postman
`"query": {
    "function_score": {
      "script_score": {
        "script": {
          "lang": "painless",
          "source": """
            int total = 0;
            for (int i = 0; i < doc['goals'].length; ++i) {
              total += doc['goals'][i];
            }
            return total;
          """
        }
      }
    }
  }
}`