本文主要是介绍对elasticsearch中的 painless 的学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前研究了挺多的es集群规划,读写原理等。都有将这些只是用在我们的集群中。近期有需求修改es中的字段数据,并且还不是简单的修改某个字段。不仅仅要修改字段,而且想要经过复杂的逻辑判断以后才能去修改数据。
于是终于接触到了es中神奇的脚本语言painless。
在这篇文章中,我首先会分享出来自己查看的文档资料(最好的学习资料还是扒着官网一点一点的扣)。虽然文档上都有,但是还挺难找到。不用担心,我都会把原文链接都放出来。另外我会分享一下我对英文文档学习的心得,自己的一些潜在的理解。
先放学习文档
入口:
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-guide.html
入门案例
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-walkthrough.html
学习painless特性
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-lang-spec.html
painless API
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-shared.html
学习心得
由于都是英文文档,都是近期晚上研究的,没有太多时间去做中文翻译。只讲有用的吧!
文档都是英文的,我们可以借助一点翻译,并不难。文档内容也不是很多,花几个小时就能通读一遍。所以不要有任何的恐惧的心理。
如果您熟悉java语言,那就太好了!因为painless就继承自java8。这是什么意思呢。也就是我们的你几乎完全可以把painless当做java来写,或者把写好的java代码,放在脚本里边来执行。并且还添加了一些内容,比如添加了def 弱对象类型。
painless的API就在这里(哪里不会写了,随时可以查看一下):
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-shared.html
更多的painless的细节
先熟悉一下script语法结构
POST /seats/_update/3
{"script": {"source": "ctx._source.sold = true; ctx._source.cost = params.sold_cost","lang": "painless","params": {"sold_cost": 26}}
}
source: 所谓的脚本内容。我们可以写一些代码逻辑,来处理我们的每一条数据。这里有我们很大的操作空间。想要对数据做什么操作,都可以写在这里,最后被执行。
lang:就是脚本语言。es5版本之后就只支持这一种脚本语言了。(这里可以是一段java代码)
params:实际上就是入参。时间就是一个 Map<String,Object> 对象。我们可以在上边的source里边来访问到 params。语法也很简单, 就通过 params.字段 就可以获取到值。 这就像是.get()。
如果你熟悉java语言的话,完全可以把 source当做方法体,而params就当做是入参。
ctx: ctx是出现在source里边的内容,它看起来不好理解(单请牢记它,它会频繁的出现在脚本中)。实际上,它就是一个document对象。我们通常使用 ctx._source 来获取到我们要操作这条数据对象。
我们通常操作的就是 ctx一条文档数据下的 _source的内容,如截图:
再如官方文档告诉我们的,我们通过 ctx._source 获取到的就是一个map对象。我们要操作的数据就放在这里边。
更多内容
等待继续更新,今晚太晚了。
这篇关于对elasticsearch中的 painless 的学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!