ElasticSearch Scripted Metric
官方文档上关于这一部分的介绍,只有个简单的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相关推荐
- Elasticsearch Scripted Metric Aggregation 自定义聚合
1.首先创建所以: PUT test_date { "settings":{ "number_of_shards":2, " ...
- 举个栗子说明elasticsearch 的 scripted metric aggregation
说明scripted metric aggregation 的用法. POST /dd/doc/_bulk?refresh {"index":{"_id":1} ...
- Elasticsearch(三)--Metric(指标)
说明:该博客对应的Elasticsearch 的版本为7.8.0;测试工具为postman 1,概念 理解四个关键字:Metric(指标),Bucketing(桶),Matrix(矩阵),Pipeli ...
- ES官网reference翻译文章(19)—Scripted Metric Aggregation
对ES官网的reference的翻译,同时也是备忘,ES版本为7.5 下面是正文翻译,附上原文链接: https://www.elastic.co/guide/en/elasticsearch/ref ...
- Elasticsearch聚合初探——metric篇
2019独角兽企业重金招聘Python工程师标准>>> Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的统计--聚合. 前言 ES ...
- 01.elasticsearch metric aggregation 查询
文章目录 1. 数据准备 2. metric aggregation分类 3.使用样例 1 . Avg Aggregation : 求query出来的结果的average 值 2 . Weighted ...
- Elasticsearch:使用 Elasticsearch Transforms 进行产品推荐
这篇博文将引导你完成从包含订单项的索引创建产品推荐的步骤. 推荐在很多的 eCommerce 网站上可以看到: 这篇文章展示了如何使用转换(transforms)从不断更新的订单项目中自动创建此数据, ...
- Elasticsearch 5.x Java api Aggregations(聚合)
Ealsticsearch 5.x Java API聚合string类型的时候,会报错(json的错),则需要在聚合的string类型字段的后面添加.keyword , 虽然使用watch查看聚合的e ...
- 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 ...
最新文章
- Velocity的中文问题
- 如何用深度学习做自然语言处理?这里有份最佳实践清单
- pandas速查手册(中文版)
- GAIR 2020 工业互联网专场演讲实录:腾讯云人工智能在工业互联网领域的实践
- 无线路由器和计算机怎么连接网络连接,华为无线路由器怎么连接宽带上网
- sessionID的本质
- 基于springboot多模块项目使用maven命令打成war包放到服务器上运行的问题
- 4 关卡流 进阶_赛博朋克2077:实用玩法攻略,技术流玩法攻略
- 本地上传文件到Linux云服务器
- 速读-高级技能二:并行输入训练
- 不忘初心,不负韶华——2021年中会议发言之一
- java后端简历项目经历_简历上的项目经历怎么写 ?这 3 条原则不可忽视 !
- 【rmzt:魔兽冰封王座主题】
- 对大学计算机课程老师评价,评价:关于构建大学计算机课程评价体系的思考
- Minimum supported Gradle version is 4.10.1. Current version is 4.6.
- 8汉化 netreflector_Reflector 8中文版
- Delphi开发短信应用-阿里云服务
- 通过javascript免费下载百度文库的文档的小技巧
- 乐视手机便签怎么备份到云端
- unsplash 图片版权