当前位置: 首页 > 面试题库 >

elasticsearch:如何编写多语句脚本?

景恩
2023-03-14
问题内容

我在Elasticsearch索引中的文档中存储了值。
我需要对值进行一些日期操作,并返回要在过滤器中使用的布尔值。
该脚本涵盖了几行,但我无法运行它。

我编写了其他可以正常工作的脚本,但是我对Groovy的了解甚少,而对Elastic search的了解却很少。

我可以用脚本找到的每个样本只有一行,只有一行。

所以基本上我将如何采用这个完全有效的脚本

"script": {
    "script": "doc['state'].value == 'completed' && doc['lastStateUpdate'].value < doc['dueDate'].value"
    }

并把它变成像

"script": {
    "script": "def isCompleted = doc['state'].value == 'completed' 
               def preSLA = doc['lastStateUpdate'].value < doc['dueDate'].value
               return isCompleted && preSLA"
    }

我对创建一个只写一个表示逻辑的线性的想法并不感到生气,我可以看到更多这样的逻辑,尽管这个相对简单,但是“一个线性”并没有用削减它。

这里的替代方法是在对文档建立索引之前对其进行一些预处理,然后向其中添加额外的数据。但是,这样做的缺点是它非常不灵活,我们需要重新索引所有数据以更改这些聚合,而我们不希望这样做。


问题答案:

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

"script": {
    "script": "isCompleted = doc['state'].value == 'completed'; preSLA = doc['lastStateUpdate'].value < doc['dueDate'].value; return isCompleted && preSLA;"
    }

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



 类似资料:
  • 问题内容: 我想使用查询来比较多个字段。我有字段1到4。我想搜索字段1大于字段2并且下面的查询工作正常的数据; 现在,我想搜索哪个字段1大于字段2以及哪个字段3大于字段4的数据。根据Elastic Search:如何编写多语句脚本?和此链接,我只需要用分号分隔每个语句。所以应该是这样的: 但是该查询无效,并返回如下编译错误: ] .value> doc [‘field2’]。value; doc

  • 我想使用查询来比较多个字段。我有字段1到字段4。我想搜索数据,其中字段1大于字段2,下面的查询是完美的工作; 现在,我想搜索哪个字段1大于字段2,哪个字段3大于字段4的数据。根据弹性搜索:如何编写多语句脚本?在这个链接中,我只需要用分号分隔每条语句。所以它应该是这样的: 但该查询不起作用,并返回如下编译错误: {“根本原因”:[{“类型”:“脚本异常”,“原因”:“编译错误”,“脚本堆栈”:[“d

  • 问题内容: 在python中,我们使用反斜杠表示当前语句继续到下一行 例如, 或者简单地说, 可以用Go语言做到这一点吗?谢谢 问题答案: 当然可以,只需将运算符放在最后,例如: 另请注意,不可能在操作员之前中断换行。以下代码 无效 : 该规则在此处和规范中进行了描述。

  • null 但这也不起作用。我如何添加'X'作为这个switch语句的默认值,什么可以帮助我防止自己再次犯这个错误?

  • 我有两个问题。 ①当useState初始值真假时,if语句如何适应下面? 比如说。。 ②当if语句为true和false时,如何使setGoodBotton从React钩子和if语句适应下面? 例如…(这不是工作)

  • 数据库:Sybase Advantage 11 在我对数据进行规范化的过程中,我试图删除从以下语句中得到的结果: