对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对象。我们要操作的数据就放在这里边。 

更多内容

等待继续更新,今晚太晚了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值