Elasticsearch学习笔记

1.核心概念
- bucket: 一个数据分组(类似于sql group by以后的数据)
- metric:对bucket执行的某种聚合分析的操作,比如说求平均值,最大值,最小值。一些系列的统计方法(类似 select count(1) MAX MIN AVG)
请求参数说明:
size: 0 ,//只要聚合结果,不要原始数据,不等于0会返回原始数据
aggs: 固定语法,对数据进行分组聚合操作(类似于group by操作)
terms: 根据字段的值进行分组
field: 根据指定的字段值进行分组
返回参数说明:
hits.hits: 我们指定的size是0,所以hits.hits就是空,否则会返回聚合原始数据
aggregations:聚合结果
buckets:根据聚合条件返回的结果集
key: 每个bucket对应分组条件的值
doc_count:每个bucket分组内数据量
默认排序规则:安装doc_count 降序排列
Aggregation 的语法

例如:

2.java代码关于脚本解析(Painless 编程调试)
第一种使用自定义聚合脚本
Map<String, List<TimeDuration>> resMap = new HashMap<String, List<TimeDuration>>();String index = this.getIndex();SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
TermQueryBuilder bdsIdQueryBuilder = QueryBuilders.termQuery("bdsId", bdsId);BoolQueryBuilder lessThanStartQueryBuilder = QueryBuilders.boolQuery();
RangeQueryBuilder faultStartLessThanStart = QueryBuilders.rangeQuery("faultStartTime").lte(start);
RangeQueryBuilder faultEndLessThanStart = QueryBuilders.rangeQuery("faultEndTime").lte(start);
lessThanStartQueryBuilder.must(faultStartLessThanStart);
lessThanStartQueryBuilder.must(faultEndLessThanStart);BoolQueryBuilder greatThanStartQueryBuilder = QueryBuilders.boolQuery();
RangeQueryBuilder faultStartGreatThanStart = QueryBuilders.rangeQuery("faultStartTime").gte(end);
RangeQueryBuilder faultEndGreatThanStart = QueryBuilders.rangeQuery("faultEndTime").gte(end);
greatThanStartQueryBuilder.must(faultStartGreatThanStart);
greatThanStartQueryBuilder.must(faultEndGreatThanStart);boolQueryBuilder.must(bdsIdQueryBuilder);
boolQueryBuilder.mustNot(lessThanStartQueryBuilder);
boolQueryBuilder.mustNot(greatThanStartQueryBuilder);searchSourceBuilder.query(boolQueryBuilder);//这里开始是脚本聚合,自定义脚本聚合可以互相交互
ScriptedMetricAggregationBuilder scriptedMetricAggregationBuilder = AggregationBuilders.scriptedMetric("fault_duration");//参数初始化
Map<String, Object> params = new HashMap<String, Object>();
params.put("now", now.getTime());
params.put("start", start.getTime());
params.put("end", end.getTime());//脚本初始化
Script initScript = ScriptUtil.getScriptBy(CABLEFAULT_SCRIPT_PATH, "init_script.js");
Script mapScript = ScriptUtil.getScriptBy(CABLEFAULT_SCRIPT_PATH, "map_script.js");
Script combineScript = ScriptUtil.getScriptBy(CABLEFAULT_SCRIPT_PATH, "combine_script.js");
Script reduceScript = ScriptUtil.getScriptBy(CABLEFAULT_SCRIPT_PATH, "reduce_script.js");
scriptedMetricAggregationBuilder.params(params);
scriptedMetricAggregationBuilder.initScript(initScript);
scriptedMetricAggregationBuilder.mapScript(mapScript);
scriptedMetricAggregationBuilder.combineScript(combineScript);
scriptedMetricAggregationBuilder.reduceScript(reduceScript);TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_by_cableid").field("cableId");
termsAggregationBuilder.subAggregation(scriptedMetricAggregationBuilder);
termsAggregationBuilder.size(ESPage.DEFAULT_ALL_PAGESIZE);
termsAggregationBuilder.minDocCount(0);searchSourceBuilder.aggregation(termsAggregationBuilder);ESPage.Builder builder = new ESPage.Builder(ESPage.DEFAULT_ALL_PAGESIZE).pageNo(0);
ESPage esPage = builder.build();
searchSourceBuilder.from(Long.valueOf(esPage.getFrom()).intValue());
searchSourceBuilder.size(0);searchRequest.source(searchSourceBuilder);
//执行发送 ES调用查询
SearchResponse searchResponse = this.restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggs = searchResponse.getAggregations();
第二种混合调用
String index = this.getIndex();SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
TermQueryBuilder bdsIdQueryBuilder = QueryBuilders.termQuery("bdsId", bdsId);
RangeQueryBuilder evaluateTimeQueryBuilder = QueryBuilders.rangeQuery("evaluateTime").gte(start).lte(end);
TermQueryBuilder evaluateTypeQueryBuilder = QueryBuilders.termQuery("evaluateType",String.valueOf(evaluateType.getValue()));
boolQueryBuilder.must(bdsIdQueryBuilder);
boolQueryBuilder.must(evaluateTimeQueryBuilder);
boolQueryBuilder.must(evaluateTypeQueryBuilder);searchSourceBuilder.query(boolQueryBuilder);TopHitsAggregationBuilder topHitsAggregationBuilder = AggregationBuilders.topHits("top_record");
topHitsAggregationBuilder.sort("createDate", SortOrder.ASC);
topHitsAggregationBuilder.size(CommonConstant.ES_MAX_TOP_HITS);Script filterScript=ScriptUtil.getScriptBy(HEALTH_PVLOSS_SCRIPT_PATH,"pv_filter_script.js");TermsAggregationBuilder groupByEvaluateTimeAggregationBuilder = AggregationBuilders.terms("group_by_bds_id_evaluate_time");
groupByEvaluateTimeAggregationBuilder.script(filterScript);//注意一下这里,与第一种方式调用不一样
groupByEvaluateTimeAggregationBuilder.subAggregation(topHitsAggregationBuilder);
groupByEvaluateTimeAggregationBuilder.size(CommonConstant.ES_MAX_PAGE_SIZE);
groupByEvaluateTimeAggregationBuilder.minDocCount(0);TermsAggregationBuilder groupByPvCodeAggregationBuilder = AggregationBuilders.terms("group_by_pvcode").field("pvCode");
groupByPvCodeAggregationBuilder.subAggregation(groupByEvaluateTimeAggregationBuilder);
groupByPvCodeAggregationBuilder.size(CommonConstant.ES_MAX_PAGE_SIZE);
groupByPvCodeAggregationBuilder.minDocCount(0);searchSourceBuilder.aggregation(groupByPvCodeAggregationBuilder);
ESPage.Builder builder = new ESPage.Builder(ESPage.DEFAULT_ALL_PAGESIZE).pageNo(0);
ESPage esPage = builder.build();searchSourceBuilder.size(0);searchRequest.indices(index);
searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = this.restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggs = searchResponse.getAggregations();
相关文章:
Elasticsearch学习笔记
1.核心概念 bucket: 一个数据分组(类似于sql group by以后的数据)metric:对bucket执行的某种聚合分析的操作,比如说求平均值,最大值,最小值。一些系列的统计方法(类似 select count(1) MAX MIN AVG) 请…...
Java框架随笔
Maven面试题 Myabtis面试题 文章目录 Maven面试题Myabtis面试题 1、简述Spring Boot的启动流程2、如何理解Bean的生命周期3、MyBatis的主要功能4、MyBatis的组成部分5、MyBatis的动态SQL 1、简述Spring Boot的启动流程 Spring Boot的启动流程可以分为以下几个步骤:…...
自然语言处理基础——词表示
词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …...
2023年9月青少年软件编程(C 语言) 等级考试试卷(七级)
青少年软件编程(C/C)7级等级考试真题试卷(2023年9月) 编程题第 1 题 红与黑(2023.9) 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,…...
鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景
鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…...
apache httpd 换行解析漏洞
原理 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 漏洞编号 cve-2017-15715 环境…...
【设计模式】工厂模式
工厂模式 1.什么是工厂模式 它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象…...
C++二分算法的应用:寻找峰值原理、源码及测试用例
说明 此文是课程https://edu.csdn.net/course/detail/38771 的讲义。 源码下载:https://download.csdn.net/download/he_zhidan/88458478 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>…...
外汇天眼:本周无牌裸奔平台名单出炉,你踩“坑”了么?!!
监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…...
10 读写锁ReentrantReadWriteLock
1 介绍 为什么要使用读写锁? 需要高并发读取和较低并发写入的应用程序,降低锁的粒度,提高系统性能 使用场景: 读多写少的共享资源 缓存管理:读 >> 写,控制多个线程同时读缓存,需要刷新o…...
laravel队列
laravel redis队列 1、创建job队列任务 php artisan make:job StoreUser执行上述命令后,会生成app/Jobs/StoreUser.php文件,编辑文件内容如下: <?phpnamespace App\Jobs;use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queu…...
【计算机网络】TCP 协议的相关特性
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的协议。以下是TCP协议的相关特性: 可靠性:TCP通过确认和重传机制保证数据的可靠传输。 面向连接:TCP在传输数据前需要先建立连接。连接的建立过程包括三次握手…...
[软件安装] tmux安装及相关事项
tmux安装及相关事项 tmux是一个终端复用工具,可以在单个终端窗口中同时运行多个终端会话。安装tmux可以提高工作效率,使命令行操作更加方便。 1. 安装tmux: 在Linux系统下,可以使用包管理器来安装tmux,比如在Ubuntu…...
leetcode 887 ——扔鸡蛋
题目大意: 你有k个鸡蛋,对n层楼的建筑,请确认在f层扔鸡蛋鸡蛋恰好不会破碎的最少次数(f满足 0 < f < n)。 方法一: 状态:即会发生变化的量,很明显有两个,当前拥有…...
自动化运维ansible(role)
一、role的介绍 1、Roles称为角色,本质上是为简化playbook配置文件而产生的一种特殊的方法。 2、简单来说,roles就是将原本在一个yaml中的文件进行规则化分散,封装到不同的目录下,从而简化playbook的yaml配置文件大小。从其实现方…...
linux命令笔记
创建文件夹 sudo mkdir 文件夹名vim笔记 vim的查找和退出查找 进入vim 按/ 输入内容即可查找 按enter结束查找vim创建文件并在里面写东西 比如创建文件为 hello.cpp vim hello.cpp查看所有文件 # 查看所有文件,并以列表的形式查看,显示出文件大小 …...
2.3.C++项目:网络版五子棋对战之实用工具类模块的设计
文章目录 一、实用工具类模块(一)功能 二、设计和封装(一)日志宏封装(二)mysql_util封装(三)Jsoncpp-API封装(四)file_util封装(五)st…...
跳跃游戏----题解报告
题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题解: 其实就直接挨着跳就行了,循环中不断更新k,不停比较k和当前位置跳跃的最大值即可 代码: public boolean canJump(int[] nums) …...
SpringBoot下的代理注解
EnableAspectJAutoProxy Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Import(AspectJAutoProxyRegistrar.class) public interface EnableAspectJAutoProxy {// 是否代理目标对象,ture:使用CGLIB代理 fasle:使用JDK代理boolean proxy…...
[C++随想录] 二叉搜索树
搜素二叉树 二叉搜索树的使用二叉搜索树的模拟实现(K)整体结构循环版本递归版本 二叉搜索树的应用源码(kv) 二叉搜索树的使用 二叉搜索树 相较于 普通的二叉树来说: 根节点的左子树的所有键值都 小于 根节点, 根节点的右子树的所有键值 大于 根节点根节点的 左右子树 都是 二…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
