官方文档上关于这一部分的介绍,只有个简单的demo,实际操作起来还是有一定困难的,相信很多会和我一样的感觉。所以在这里把我遇到的问题以及对脚本的理解分享给大家。

(1)脚本聚合修改配置文件开启脚本后没效果

这个问题,解决了好久,后来发现貌似最新版的ElasticSearch的配置文件,在修改时,不要只是简单的去掉前面的#号,一定要加空格和前面的对齐,反正改了两天,最后加了空格我的就好了o(╯□╰)o

(2)注意不同版本的Elaticsearch对脚本聚合的调用语句也不一样

好像是2以后有了很大的改变,所有建议大家在写的时候,去官方文档上找到自己的elasticSearch版本对应的文档去看,1.7的时候聚合还不是单独的一个父目录,而是在SearchAPI下的一个子目录,2.0以后就和searchAPI提到同一级别了。引用脚步文件的方式不同主要体现在,1.7使用的是,

"aggregations": {"aggs": {"scripted_metric": {"params": {"_agg": {"script_params": [}},"init_script_file": "init_script","map_script_file": "map_script","combine_script_file": "combine_script","reduce_script_file": "reduce_script"}}}

而2.4使用的是如下这种方式

"init_script" : {"file": "my_init_script"},"map_script" : {"file": "my_map_script"},"combine_script" : {"file": "my_combine_script"},"params": {"field": "amount" },"reduce_script" : {"file": "my_reduce_script"},

(3)在对日期类型的字段做操作时取出来的日期不全

一般是因为索引map的问题,很多时候自己想单独搭建本机es完成工作的时候,慌忙的拷贝索引,忘了建map,就会导致拷贝的数据全是String,从而导致再脚本中获取文档中的日期字段时出现问题;

(4)通过脚本获取日期范围内的数据,发现数据丢失

这个还是因为是时区的缘故吧,所以获取的日期要做一下特殊的处理,在进行比较,如下所示在map_script脚本中获取es中字段为time的日期值,处理过后再进行操作

def hour8 = 60 * 60 * 8 * 1000
def time = new Date(doc['time'].value - hour8

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

init_scripts:就算是初始化脚本吧,个人的了解,一般里面只写一句话,定义一个数组或者map什么的,因为他是全局的,所有可以将map_script中的处理的数据结果放入你在init中定义的结构中;

map_scripts:算是比较重要的一部分了吧,因为每个分片上都会跑,至于数据怎么分配的就是es的问题了,它是遍历每一条数据记录,也就是说,你完全不用考虑循环每条数据,只需要在map脚本用如下的方式获取数值,就好,就把他想成一条记录,进行你要的逻辑处理操作,然后脚本运行时,会把每条记录都放到脚本中走一遍。

doc['time'].value

combine_script:我的理解是,这里是每个分片应该返回的东西,很多时候返回的都是在init中定义的,那个数据结构,因为会把在map中处理过的数据存入其中,脚本是每个节点都在跑,最后将所有的数据进行汇总,反馈回来,而combine里的东西,应该就是每个分片处理完成之后返回的东西吧

reduce_scripts:对数据的最后一步操作,这里只能对combine中返回的数据进行操作,而不能再去获取文档中的字段值,了,一般这里都会做一些关于数据的交集,数据的汇合等处理。

举个例子,我要统计,一张生日表中(姓名,生日)中年龄大于20岁并且姓名为三个三个字得人的星座类型,首先在map_script中筛选出符合条件的记录,可以将记录存储在预先在init_script中定义的数组中,在combine_script脚本中确定最后需要返回的数据,至于reduce_script,就是我们用来将所有的数据进行汇总,然后依据数据为最终的返回结果增加星座的判断。

————————————————————————————————————————————————————————————————————————————

*

ElasticSearch Scripted Metric相关推荐

  1. Elasticsearch Scripted Metric Aggregation 自定义聚合

    1.首先创建所以: PUT test_date {   "settings":{       "number_of_shards":2,       " ...

  2. 举个栗子说明elasticsearch 的 scripted metric aggregation

    说明scripted metric aggregation 的用法. POST /dd/doc/_bulk?refresh {"index":{"_id":1} ...

  3. Elasticsearch(三)--Metric(指标)

    说明:该博客对应的Elasticsearch 的版本为7.8.0;测试工具为postman 1,概念 理解四个关键字:Metric(指标),Bucketing(桶),Matrix(矩阵),Pipeli ...

  4. ES官网reference翻译文章(19)—Scripted Metric Aggregation

    对ES官网的reference的翻译,同时也是备忘,ES版本为7.5 下面是正文翻译,附上原文链接: https://www.elastic.co/guide/en/elasticsearch/ref ...

  5. Elasticsearch聚合初探——metric篇

    2019独角兽企业重金招聘Python工程师标准>>> Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的统计--聚合. 前言 ES ...

  6. 01.elasticsearch metric aggregation 查询

    文章目录 1. 数据准备 2. metric aggregation分类 3.使用样例 1 . Avg Aggregation : 求query出来的结果的average 值 2 . Weighted ...

  7. Elasticsearch:使用 Elasticsearch Transforms 进行产品推荐

    这篇博文将引导你完成从包含订单项的索引创建产品推荐的步骤. 推荐在很多的 eCommerce 网站上可以看到: 这篇文章展示了如何使用转换(transforms)从不断更新的订单项目中自动创建此数据, ...

  8. Elasticsearch 5.x Java api Aggregations(聚合)

    Ealsticsearch 5.x Java API聚合string类型的时候,会报错(json的错),则需要在聚合的string类型字段的后面添加.keyword , 虽然使用watch查看聚合的e ...

  9. Elasticsearch 7.x版本重大改变(Breaking changes in 7.x)

    Breaking changes in 7.0 This section discusses the changes that you need to be aware of when migrati ...

最新文章

  1. Velocity的中文问题
  2. 如何用深度学习做自然语言处理?这里有份最佳实践清单
  3. pandas速查手册(中文版)
  4. GAIR 2020 工业互联网专场演讲实录:腾讯云人工智能在工业互联网领域的实践
  5. 无线路由器和计算机怎么连接网络连接,华为无线路由器怎么连接宽带上网
  6. sessionID的本质
  7. 基于springboot多模块项目使用maven命令打成war包放到服务器上运行的问题
  8. 4 关卡流 进阶_赛博朋克2077:实用玩法攻略,技术流玩法攻略
  9. 本地上传文件到Linux云服务器
  10. 速读-高级技能二:并行输入训练
  11. 不忘初心,不负韶华——2021年中会议发言之一
  12. java后端简历项目经历_简历上的项目经历怎么写 ?这 3 条原则不可忽视 !
  13. 【rmzt:魔兽冰封王座主题】
  14. 对大学计算机课程老师评价,评价:关于构建大学计算机课程评价体系的思考
  15. Minimum supported Gradle version is 4.10.1. Current version is 4.6.
  16. 8汉化 netreflector_Reflector 8中文版
  17. Delphi开发短信应用-阿里云服务
  18. 通过javascript免费下载百度文库的文档的小技巧
  19. 乐视手机便签怎么备份到云端
  20. unsplash 图片版权

热门文章

  1. shell 脚本之切换用户
  2. ASP.NET CORE MVC使用SCD(独立部署)发布
  3. 长尾关键词是什么意思呢
  4. 关于VS CODE设置代理服务器的实测好用的方法
  5. 使用 fs-extra 模块替代 fs
  6. 图像融合方法概述笔记
  7. 家电市场消费现新变化
  8. Failed to start LSB: Bring up/down解决方法
  9. 团队管理核心-提高团队绩效
  10. 米尔科技MPSoC开发板评测