探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别

r660926
发布于 2022-4-20 12:33
浏览
0收藏

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区
上述问题不止一次被问到,我自己在使用 painless 脚本的时候,也会遇到上述困惑。

 

今天,我们把这几种的区别梳理清楚。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

 

解读如下:


上面的脚本通过 ingest painless 脚本实现了判定:

 

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

 

上面的例子解读如下:


如果标签字段:tags 包含:“green”,则 执行删除操作;否则保持现状。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

官方文档地址:

 

https://www.elastic.co/guide/en/elasticsearch/painless/7.15/painless-update-context.html

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

如上 reindex 脚本解读如下:

 

如果源索引:test-04 字段 foo 内容=‘bar’,则 reindex 后删除 ‘foo’ 字段 且 views 取值加 1 。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

如上search 脚本解读如下:


对观看数 views 在检索的时候加了随机值。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

官方文档:

 

https://www.elastic.co/guide/en/elasticsearch/painless/7.15/painless-field-context.html

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区
举例如下:求字符串中的某子串,java 语法中的 substring 还能用吗?

 

如果使用:ingest processor 预处理方式,怎么查官方是否支持,我相信是大家关注的问题。

 

因为:支不支持可以试,但试是穷举的方式,时间复杂度为 O(n);

 

能查看官方明确说支持,是最快的方式,时间复杂度为O(1)。

 

对于我们程序员来说,怎么快,我们就怎么来。

 

来吧,一步步走一遍,其他复杂例子原理同。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

 

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

上面脚本是借助 ingest pipelie 实现:取子串内容,源串为:“hello world”,取出后的子串为:“hello”。


核心步骤再结合上面的截图解释一下:

 

-步骤1:确认 string 类型支持取子串;

 

-步骤2:找到取子串的语法:substring;

 

-步骤3:通过 ingest 预处理方式实现取子串,借助 ctx 组合 substring 实现。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区如上实例,借助 painless 脚本实现了获取日期类型数据的年份,是借助 getYear( ) 的函数实现的。

探究 | Elasticsearch Painless 脚本 ctx、doc、_source 的区别-鸿蒙开发者社区

Painless 脚本在数据预处理、更新、reindex、获取字段方面应用广泛。

 

因业务场景的不同,脚本使用方式也会有不同。大家使用过程中要根据使用方式的不同,来决定ctx、doc、_source 的选型。

 

希望本文对你的脚本实战选型有所帮助,也欢迎留言交流你的脚本使用心得......

 

 

 

分类
收藏
回复
举报
回复
    相关推荐