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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3DCNN参数解析:2013-PAMI-3DCNN for Human Action Recognition「建议收藏」

    3DCNN参数解析:2013-PAMI-3DCNN for Human Action Recognition「建议收藏」3DCNN参数解析:2013-PAMI-3DCNNforHumanActionRecognition参数分析Input:7@60×\times×40,7帧,图片大小60×\times×40hardwired:H1产生5通道信息,分别是gray,gradient-x,gradient-y,optflow-x,optflow-y。前三个对于每一张图片都计算得…

    2022年6月11日
    43
  • springcloud gateway作用_gateway网关路由配置

    springcloud gateway作用_gateway网关路由配置Gateway服务网关在SpringCloud中网关的实现包括两种:①gateway②zuulzuul是基于servlet的实现,属于阻塞式编程,而springcloudgateway则是基于spring5中提供的webflux,属于响应式编程的实现,具备更好的性能.gateway快速入门1创建新的module,引入SpringCloudGetaway的依赖和nacos的服务发现依赖 <!–网关依赖–><dependency> <

    2022年10月9日
    0
  • TOMCAT 严重: Error filterStart

    TOMCAT 严重: Error filterStart早上,练习了一个关于struts2的程序,结果tomcat一直报错:TOMCAT严重:ErrorfilterStart,在网上找了各种方法,都不管用,最后干脆把tomcat5.0卸了,直接下了一个6.0的版本,结果问题解决.这可能是tomcat6.0的弥补了5.0存在的一些漏洞吧,(我个人感觉啊),上网也查了一下,Tomcat6.x在目录结构上就是针对lib包的存放位置做了调整,使应用…

    2022年7月11日
    14
  • zabbix短信报警_手机短信监听

    zabbix短信报警_手机短信监听zabbix短信监控

    2025年6月12日
    2
  • idea 激活码2022_通用破解码

    idea 激活码2022_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    309
  • MATLAB(2)–MATLAB矩阵的表示

    MATLAB(2)–MATLAB矩阵的表示MATLAB–MATLAB矩阵的表示矩阵的建立冒号表达式linspace结构矩阵单元矩阵最后矩阵的建立利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵的顺序输入各元素,同一行的各元素之间用逗号或者空格分隔,不同的元素之间用分号分隔。利用已建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。可以用实部矩阵和虚部矩阵构成复数矩阵。冒号表达式冒号是一个重要的运算符,利用它可以产生行向量。冒号表达式的一般格式为:e1:e2:e3其中,e1为初始值,e2为步长,e3为终

    2022年6月25日
    31

发表回复

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

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