【发布时间】:2019-06-13 23:30:53
【问题描述】:
我将值存储在 Elasticsearch 索引的文档中。
我需要对这些值进行一些日期操作并返回一个布尔值以在过滤器中使用。
脚本覆盖了几行,我无法让它运行。
我编写了其他运行良好的单个脚本,但是我对 Groovy 知之甚少,对 Elastic 搜索知之甚少。
我可以通过脚本找到的每个示例都有一行且只有一行。
所以基本上我将如何使用这个完全有效的脚本
"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"
}
我对创建一个表达逻辑的只写一个衬里的想法并不生气,我可以看到更多这样的内容,虽然这个相对简单,但“一个衬里”不是不会剪掉它。
这里的替代方法是在文档被索引之前对其进行一些预处理,并向其添加额外的数据。但是,这样做的缺点是相当不灵活,我们需要重新索引所有数据以更改这些聚合,而我们宁愿不这样做。
【问题讨论】:
标签: groovy elasticsearch