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

我在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。

以上是 elasticsearch:如何编写多语句脚本? 的全部内容, 来源链接: utcz.com/qa/412044.html

回到顶部