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


相关推荐

  • mysql全文索引实现搜索功能(关键词查询)

    mysql全文索引实现搜索功能(关键词查询)最近在做一个关键词查询功能。所以开始了解mysql的全文索引技术。接下来我将一步一步告诉大家。我是如何一步一步实现关键词检索的。1.了解到mysql全文检索是以词为基础的。MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。所以我存在数据库的样子是这样的。(左边的字段用于显示,右边的字段用于全文查询)2.全文检索的sqlSELECT*FROMtbk_item_coupon…

    2022年6月21日
    50
  • countdowntimer_TIMESTAMPDIFF

    countdowntimer_TIMESTAMPDIFF需求:加载某一个界面,在页面中待5秒后再关闭效果图如下:设置了一个点击事件,当文字显示为Skipactivity时,点击跳转界面。代码及介绍如下图:核心功能代码如下Android自带的CountDownTimer这个工具类,也是通过Handler和子线程来实现的。//倒计时工具类CountDownTimer//CountDownTimer的构造方法有两个参数…

    2022年9月18日
    0
  • 利用iframe技巧获取訪问者qq

    利用iframe技巧获取訪问者qq

    2021年12月9日
    56
  • pycharm如何编译程序_xc8编译器

    pycharm如何编译程序_xc8编译器现在轮到PyCharmPyCharm安装教程PyCharm是一款功能强大的Python编辑器,具有跨平台性,鉴于目前最新版PyCharm使用教程较少,为了节约时间,来介绍一下PyCharm在Windows下是如何安装的。第一步:进入PyCharm官网这是PyCharm的下载地址:http://www.jetbrains.com/pycharm/download/#section=windows进入该网站后,我们会看到如下界面:professional表示专业版,co

    2022年8月27日
    5
  • try catch里面try catch嵌套

    try catch里面try catch嵌套trycatch里能否内嵌trycatch?答案是肯定的。但是等内层trycatch出异常之后是个什么执行顺序呢?看下面代码staticvoidMain(string[]args){try{Console.WriteLine(“———————-外层try——————————“);error

    2022年6月16日
    26
  • 最新单片机毕业设计题目大全集_单片机毕业设计怎么做

    最新单片机毕业设计题目大全集_单片机毕业设计怎么做?近期不少学弟学妹询问学长关于单片机和嵌入式相关的毕设选题,学长特意写下这篇文章以作回应!以下是学长亲手整理的物联网相关的毕业设计选题,都是经过学长精心审核的题目,适合作为毕设,难度不高,工作量达标,对毕设有任何疑问都可以问学长哦!相对容易工作量达标题目新颖,含创新点httpshttpshttpshttpshttpshttps。……

    2022年10月3日
    2

发表回复

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

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