painless数字类型转换_painless获取doc字段的方式「建议收藏」

如果你写painless脚本的时候,发现对不同结构的字段获取有点困惑,那么本文可能会帮助你。取普通字段默认ES会把非text、非nested的字段存到docvalues列存储中,方便单独获取,而不用取_source里取,这样IO性能就很好。假设你有一个字段:”a”:1。那么doc[‘a’]返回的是[1],是一个数组。doc[‘a’].value返回的是1,也就是取第一个元素。doc[‘a’]….

大家好,又见面了,我是你们的朋友全栈君。

如果你写painless脚本的时候,发现对不同结构的字段获取有点困惑,那么本文可能会帮助你。

取普通字段

默认ES会把非text、非nested的字段存到doc values列存储中,方便单独获取,而不用取_source里取,这样IO性能就很好。

假设你有一个字段:”a”: 1。

那么doc[‘a’]返回的是[1],是一个数组。

doc[‘a’].value返回的是1,也就是取第一个元素。

doc[‘a’].values与doc[‘a’]表现一致,返回[1]。

特殊一点的是object类型的字段,ES底层存储时是key扁平化的,所以你应该直接这样取:

doc[‘xxx.yyy’]

doc[‘xxx.yyy’].value

doc[‘xxx.yyy’].values

取非普通字段

主要指nested字段和text字段,它们不会进入doc values。

解决方法优先采用store: true属性,强制它们进入列存储中独立保存,这样获取的时候IO性能就好得多,但是性能没有doc values好。

获取store字段的方法和普通字段没有区别,仍旧走doc变量。

但是nested字段走store后,获取方式肯定不是doc[‘xxx.yyy’],而是遍历doc[‘xxx’].values数组,每个子doc再获取yyy(我没试验,大家可以试试)。

取_source

其实_source也是一个store存储,包含了整个你索引的json文档。

只是_source太大了,远不如把单个列独立store起来的性能好,所以最次的方法就是走_source。

在修改操作时需要_ctx._source获取,在查询操作时需要params._source获取,上下文不同写法不同。

其他

doc values取到的数据类型,一定是与mapping一致的,经过约束转换的。

而走store和_source取到的数据类型,则是你索引时原样放入的数据类型,比如mapping是一个int字段,你索引时设置了一个”123″,其实doc values会存123,然而_source和store中仍旧是”123″,所以写painless脚本就会遇到一个类型问题,需要先判断是不是字符串”123″(用def+instanceof判断),如果是还得转换成整形才能运算,是很头疼的。

如果文章帮助了你,请帮我点击1次谷歌广告,或者微信赞助1元钱,感谢!

painless数字类型转换_painless获取doc字段的方式「建议收藏」

知识星球有更多干货内容,对我认可欢迎加入:

painless数字类型转换_painless获取doc字段的方式「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127273.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • django WEB聊天室项目[通俗易懂]

    django WEB聊天室项目[通俗易懂]bbs系统项目中我们用到的ajax不多,但是在聊天室里用到的全是ajax,所以本项目的主要内容就是:前端使用ajax传输json格式的数据是本节的重点以及前端函数的的使用.http协议的特点是:短链接,服务器无法主动向客户端发送消息.都是客户端请求服务器返回消息.那么问题来了,WEB聊天账户如何从后台获取消息,还要求实时的.有三种方法:1.从上述内容可知,无法实现后端把消息…

    2022年6月15日
    32
  • vue的mixins的使用[通俗易懂]

    vue的mixins的使用[通俗易懂]mixins就是混入。一个混入对象可以包含任意组件选项。同一个生命周期,混入对象会比组件的先执行。1.创建一个test.js,用export暴露出mixins对象2.在组件中引入这个mixin

    2022年8月5日
    4
  • okio 的使用及源码分析

    okio 的使用及源码分析文章目录简介一些重要的类ByteString和BufferSource和SinkRealBufferedSource和RealBufferedSink简单使用读取文本写入文本源码分析Segment成员变量构造方法poppushwriteTocompact(压缩机制)split(共享机制)SegmentPooltakerecycleBufferreadBytewriteByte超时机制T…

    2022年6月5日
    25
  • React saga_react获取子组件ref

    React saga_react获取子组件ref前言React的作用View层次的前端框架,自然少不了很多中间件(ReduxMiddleware)做数据处理,而redux-saga就是其中之一,目前这个中间件在网上的资料还是比较少,估计应用的不是很广泛,但是如果使用得当,将会事半功倍的效果,下面仔细介绍一个这个中间件的具体使用流程和应用场景。redux-saga简介Redux-saga是Redux的一个中间件,主要集中处理rea…

    2025年11月30日
    5
  • mybatiscodehelperpro激活码[最新免费获取]

    (mybatiscodehelperpro激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    406
  • shell 数组去重,去掉重复

    shell 数组去重,去掉重复shell 数组去重 去掉重复简单的问题 很难在搜索结果特意记录简单的问题 很难在搜索结果特意记录 shell 数组去重 去掉重复 bin bash 定义数组 arr 用 的方式给数组添加 arr 358 arr 453 echo 去重前 arr 去重 arr awk vRS a 1 lt lt lt arr echo 去重后 arr

    2025年12月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号