您当前的位置: 首页 >  ar

水的精神

暂无认证

  • 1浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

对elasticsearch中的 painless 的学习

水的精神 发布时间:2022-01-13 00:53:25 ,浏览量:1

  之前研究了挺多的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 对象。我们可以在上边的source里边来访问到 params。语法也很简单, 就通过 params.字段 就可以获取到值。 这就像是.get()。

 如果你熟悉java语言的话,完全可以把  source当做方法体,而params就当做是入参。

ctx: ctx是出现在source里边的内容,它看起来不好理解(单请牢记它,它会频繁的出现在脚本中)。实际上,它就是一个document对象。我们通常使用 ctx._source 来获取到我们要操作这条数据对象。

我们通常操作的就是 ctx一条文档数据下的 _source的内容,如截图:

  再如官方文档告诉我们的,我们通过 ctx._source 获取到的就是一个map对象。我们要操作的数据就放在这里边。 

更多内容

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

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0399s