ElasticSearch Scripted Metric

2024-05-25 13:48

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001676

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)

记录下,使用 docker-compose 安装 Elasticsearch 和 Kibana,并配置 IK 分词器,你可以按照以下步骤进行。此过程适用于 Elasticsearch 和 Kibana 8.10.4 版本。 安装 首先,在你的工作目录下创建一个 docker-compose.yml 文件,用于配置 Elasticsearch 和 Kibana 的服务。 version:

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

Windows下安装Elasticsearch,启动报错,解决方法,访问

对于Windows用户,我们推荐使用MSI安装包进行安装。这个安装包使用图形用户界面来引导你进行安装。 首先,从这里https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.msi下载Elasticsearch 6.1.1的MSI安装包。 然后双击下载好的安装包文件启动图形化安装程序,在第一个界面,选

Metric Matrice(nyoj545)

Metric Matrice 时间限制: 1000 ms  |  内存限制: 65535 KB 难度:1 描述 Given as input a square distance matrix, where a[i][j] is the distance between point i and point j, determine if the distance matrix is

Elasticsearch:无状态世界中的数据安全

作者:来自 Elastic Henning Andersen 在最近的博客文章中,我们宣布了支持 Elastic Cloud Serverless 产品的无状态架构。通过将持久性保证和复制卸载到对象存储(例如 Amazon S3),我们获得了许多优势和简化。 从历史上看,Elasticsearch 依靠本地磁盘持久性来确保数据安全并处理陈旧或孤立的节点。在本博客中,我们将讨论无状态的数据持

ElasticSearch的DSL查询④(DSL查询、RestClient的DSL查询)

目录 一、DSL查询 1.1 快熟入门 1.2 叶子查询 1.2.1 全文检索查询 1)match查询 2)multi_match查询 1.2.2 精确查询 1)term查询 2)range查询 3)ids查询 1.3 复合查询 1.3.1 bool查询 1.3.2 算分函数查询 1)基本语法: 2)运行流程: 3)示例: 4)执行结果: 1.4 排序 1.5