如何使用 Elasticsearch 的 Scripted Fields 实现动态字段计算?

Sherwin.Wei Lv8

如何使用 Elasticsearch 的 Scripted Fields 实现动态字段计算?

回答重点

要使用 Elasticsearch 的 Scripted Fields 实现动态字段计算,可以通过以下步骤:

1)在 Kibana 中打开“Discover”页面,选择你要操作的索引。
2)点击右上角的“索引模式管理(Index Pattern Management)”按钮,进入索引模式管理页面。
3)在索引模式管理页面,选择你要添加 scripted field 的索引模式。
4)点击“添加脚本字段(Add scripted field)”按钮,进入添加页面。
5)填写字段的名字,选择返回类型(如整数、浮点数等)。
6)在“脚本(Script)”部分,编写你的脚本。例如,如果你想计算两个字段 “field1” 和 “field2” 之和,可以写如下脚本:

1
doc['field1'].value + doc['field2'].value

7)点击“创建字段(Save script)”保存,你就成功创建了一个动态计算字段。

通过以上步骤,你就成功创建了一个 Scripted Field,能够在查询数据时动态计算字段值。

扩展知识

在使用 Scripted Fields 时,有一些注意事项和扩展思路需要考虑:

1)性能影响:Scripted Fields 会在查询的时候进行计算,因此对性能可能会有一定影响,尤其是在处理大数据量时。建议在必要时使用,而不是滥用。

2)脚本语言:Elasticsearch 默认使用 Painless 作为脚本语言,因为它是专门针对 Elasticsearch 优化的。你可以编写条件语句、循环等逻辑来完成复杂计算。

  • 例如,计算条件下的值:
    1
    2
    3
    4
    5
    if(doc['field1'].value > 10) {
    return doc['field1'].value * 2;
    } else {
    return doc['field1'].value + 5;
    }

3)安全性:由于脚本执行可能带来安全隐患,Elasticsearch 提供了脚本沙箱机制,并默认禁用了某些高级功能。如果需要,可以在 Elasticsearch 配置文件中设置允许的脚本类型和来源。

4)实验和调试:在 Kibana 的开发者工具里,你可以使用 _search API 测试你的脚本。通过将 script_fields 放入查询请求中,你可以迅速看到脚本的工作效果。例如:

1
2
3
4
5
6
7
8
9
10
11
12
{
"query": {
"match_all": {}
},
"script_fields": {
"calculated_field": {
"script": {
"source": "doc['field1'].value + doc['field2'].value"
}
}
}
}

Comments
On this page
如何使用 Elasticsearch 的 Scripted Fields 实现动态字段计算?