当前位置: 首页 > news >正文

如何使用ElasticSearch存储和查询数据

1. 引言

在大多数的场景里,存储数据都是用MySQL这类关系型数据库,这类数据库的特点是数据存储安全性和一致性高,可以用于事务操作,但是随着数据量的增加,查询的速度也会随之降低,并且其扩展能力有限,因此在日志记录和查询等场景下,MySQL就显得力不从心,为了解决对海量数据的搜索、分析和计算,引入ES(ElasticSearch)搜索引擎。

对于IOT领域,记录设备的控制日志非常的有必要,对于客诉排查或者之后的数据分析起着很重要的作用;假如共有100w的设备,一天控制5次,那一年的数据:

100w * 5 * 365 = 9 亿

因此,为了更为较好地存储和查询数据,对于这种大量增加的数据建议用es来存储。

2. ES使用

接下来就介绍一下,如何利用SpringBoot框架联合es存储和查询数据。

  • 首先引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>2.7.4</version>
</dependency>

通过引入依赖之后,就可以使用SpringBoot提供的ElasticsearchRestTemplate模版类,在该类中有着很多方法,很方便使用。

  • 配置文件,配置es连接
server:port: 8080spring:elasticsearch:rest:uris: http://127.0.0.1:9200  
#      username:     #用户名
#      password:     #密码connection-timeout: 6000read-timeout: 6000
  • 接着在使用的地方注入ElasticsearchRestTemplate
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
  • 保存数据,使用es提供save方法
elasticsearchRestTemplate.save(saveBO, getIndex(index_name));// getIndex() 方法
private IndexCoordinates getIndex(String index) {return IndexCoordinates.of(index);
}

在save方法中共有两个入参,第一个参数就是自己想存储的数据,里面的字段根据业务自定义,第二参数就是定义一个在es中的索引,其索引就像MySQL中的表名字。

  • 查询es中的数据
public List query(QueryParam queryParam){// 构建查询的条件BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();// 查询条件1:设备idif (!StringUtil.isEmpty(queryParam.getApplianceId())) {queryBuilder.filter(QueryBuilders.termQuery("applianceId.keyword", queryParam.getApplianceId()));}// 查询条件2:时间区效(开始时间&结速时间需同时传输才生效)if (queryParam.getOperateBeginDate() != null && queryParam.getOperateEndDate() != null) {queryBuilder.filter(QueryBuilders.rangeQuery("operateDate").timeZone("Asia/Shanghai")                   .gte(queryParam.getOperateBeginDate()).lte(queryParam.getOperateEndDate()));}// 实现查询条件组装,设置分页中的起始页和每页大小。NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(PageRequest.of(queryParam.getPageNo(), queryParam.getPageSize())).withSorts(SortBuilders.fieldSort("operateDate").order(SortOrder.DESC)).build();// 使用elasticsearchRestTemplate.search查询数据SearchHits<QueryResult> search = elasticsearchRestTemplate.search(nativeSearchQuery, QueryResult.class, getIndex("index_name"));// 提取其中的数据,提出存储的数据QueryResultList<QueryResult> list = search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
}

在查询方法中,首先使用BoolQueryBuilder来构建查询的条件,在代码中使用设备id和时间进行过滤;使用NativeSearchQueryBuilder构建好查询条件、分页和降序排序;接着使用elasticsearchRestTemplate.search()查询结果;最后使用search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList())对查询的结果进行提取。

3. 小结

通过以上的步骤就可以使用es存储和查询数据,其中elasticsearchRestTemplate集成度高,只需定义好入参和出参即可,其他基本都是模块化操作,非常简单方便。知道了如何使用,其里面的原理也需要了解下,有机会再探索下。

相关文章:

如何使用ElasticSearch存储和查询数据

1. 引言 在大多数的场景里&#xff0c;存储数据都是用MySQL这类关系型数据库&#xff0c;这类数据库的特点是数据存储安全性和一致性高&#xff0c;可以用于事务操作&#xff0c;但是随着数据量的增加&#xff0c;查询的速度也会随之降低&#xff0c;并且其扩展能力有限&#x…...

谈谈对Spring MVC的理解

问题分析&#xff1a; SpringMVC 是一种基于 Java 语言开发&#xff0c;实现了 Web MVC 设计模式&#xff0c;请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想&#xff0c;通过把 Model&#xff0c;View&#xff0c;Controller 分离&#xff0c;将 Web 层…...

Shopify平台Fulfillment业务模块升级

上图是销售订单、发货单与配送之间的关系图&#xff0c;销售订单可以创建多个发货单&#xff0c;多个发货单(不同销售订单)可以合并在一个配送订单进行发货 接口请求错误记录: 1. The api_client does not have the required permission(s). 2. Required parameter missing or…...

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中&#xff0c;我们希望找到图像中对象的位置。我们可以搜索一种类型的对象&#xff08;单对象检测&#xff0c;如本教程所示&#xff09;或多个对象&#xff08;多对象检测&#xff09;。通常&#xff0c;我们使用边界框定义对象的位置。有几种方法可以…...

Node.js |(二)Node.js API:fs模块 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;文件写入&#x1f407;writeFile 异步写入&#x1f407;writeFileSync 同步写入&#x1f407;appendFile / appendFileSync 追加写入&#x1f407;createWriteStrea…...

Android 13 Hotseat定制化修改——002 hotseat图标数量修改

目录 一.背景 二.实践方案 一.背景 由于需求是需要自定义修改Hotseat&#xff0c;所以此篇文章是记录如何自定义修改hotseat的&#xff0c;应该可以覆盖大部分场景&#xff0c;修改点有修改hotseat布局方向&#xff0c;hotseat图标数量&#xff0c;hotseat图标大小&#xff0…...

Flask实现接口mock,安装及使用教程(一)

1、什么是接口mock 主要是针对单元测试的应用&#xff0c;它可以很方便的解除单元测试中各种依赖&#xff0c;大大的降低了编写单元测试的难度 2、什么是mock server 正常情况下&#xff1a;测试客户端——测试——> 被测系统 ——依赖——>外部服务依赖 在被测系统和…...

分立式BUCK电路原理与制作持续更新

目录 一、分立式BUCK电路总体原理图 二、BUCK电路与LDO的区别 三、BUCK电路为什么要加电感 四、BUCK电路要加续流二极管 五、BUCK电路导通与断开的回路 六、电源公式的中的几个表示方式 1、输入功率用Pin表示 2、输出功率用Po表示 3、电源的效率公式&#xff1a;电源的…...

2023年大数据与计算国际会议 (WBDC 2023)| EI、Scoups检索

会议简介 Brief Introduction 2023年大数据与计算国际会议&#xff08;WBDC 2023&#xff09; 会议时间&#xff1a;2023年11月17 -19日 召开地点&#xff1a;中国西安 大会官网&#xff1a;www.iwbdc.org 2023年大数据与计算国际会议&#xff08;WBDC 2023&#xff09;将围绕“…...

Grafana V10 告警推送 邮件

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…...

【OpenCV常用函数:视频捕获函数】cv2.VideoCapture

文章目录 1、cv2.VideoCapture() 1、cv2.VideoCapture() 输入视频路径&#xff0c;创建VideoCapture的对象 cv2.VideoCapture(filename) filename: 视频文件的路径视频名扩展名该类的函数有&#xff1a; 1&#xff09;video.isOpened: 检查视频捕获是否成功 2&#xff09;vid…...

OptaPlanner笔记2

1.5.3 使用maven 修改pom.xml 导入optaplanner-bom以避免为每一个依赖项重复添加版本号 <project>...<dependencyManagement><dependencies><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-bom</art…...

c++文件流详细笔记

c++流 IO :向设备输入数据和输出数据 C++的IO流 设备: 文件控制台特定的数据类型(stringstream)c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 文件流 文件流: 对文件进行读写操作 头文件: 类库: ifstream 对文件输入(读文件) ofstream 对文件输出(写…...

CNN经典网络模型之GoogleNet论文解读

目录 1. GoogleNet 1.1 Inception模块 1.1.1 1x1卷积 1.2 辅助分类器结构 1.3 GoogleNet网络结构图 1. GoogleNet GoogleNet&#xff0c;也被称为Inception-v1&#xff0c;是由Google团队在2014年提出的一种深度卷积神经网络架构&#xff0c;专门用于图像分类和特征提取任…...

【C++】开源:CGAL计算几何库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍CGAL计算几何库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…...

Redis分布式锁相关

Redis分布式锁实现Redisson 15问 分布式锁:Redisson源码解析-MultiLock、RedLock 看懂Redisson分布式锁源码&#xff0c;其实并不难...

Nginx环境搭建以及Docker环境部署

目录 Nginx环境搭建 1.首先创建Nginx的目录并进入 2.下载Nginx的安装包 可以通过FTP工具上传离线环境包&#xff0c;也可通过wget命令在线获取安装包 没有wget命令的可通过yum命令安装 3.解压Nginx的压缩包 4.下载并安装Nginx所需的依赖库和包 安装方式一 安装方式二 --- 也…...

2023牛客暑期多校训练营7(C/I/M)

目录 C.Beautiful Sequence I.We Love Strings M.Writing Books C.Beautiful Sequence 思路&#xff1a;显然若得到了a[1]&#xff0c;则整个序列a我们都知道了。所以我们要求出第k大的a[1]&#xff0c;这个可以利用序列a为不递减序列的性质来得出。 首先&#xff0c;由题…...

阿里云服务器手动搭建FTP教程(Windows操作系统)

阿里云百科介绍使用阿里云服务器搭建FTP教程&#xff0c;云服务器为Windows操作系统&#xff0c;当需要远程连接Windows实例进行文件传输时&#xff0c;可以通过搭建FTP站点实现。本文将介绍如何在Windows实例中搭建FTP站点。 目录 准备工作 步骤一&#xff1a;添加IIS以及F…...

idea+gradle阅读spring5.2.9源码之源码构建报错解决方案

注意 1、先确保gradle版本和spring、jdk版本对应 本文:gradle:5.6.4/spring 5.2.9/jdk1.8&#xff08;gradle和jdk都要先安装好&#xff0c;gradle还要配置好本地资源文件路径&#xff09; 2、原来项目乱了的话&#xff0c;先重新导入下载的源码项目 3、进入源码所在根目录&…...

Applite镜像加速:为Homebrew Casks带来流畅的GUI管理体验

Applite镜像加速&#xff1a;为Homebrew Casks带来流畅的GUI管理体验 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite Applite是一款专为macOS设计的开源GUI应用程序&#xff0…...

告别编译报错:手把手教你配置IAR for CC2530的工程选项与链接器文件

攻克IAR编译难题&#xff1a;CC2530工程配置与链接器文件深度解析 当你满怀期待地在IAR Embedded Workbench中点击"Build"按钮&#xff0c;却看到满屏红色错误提示时&#xff0c;那种挫败感每个嵌入式开发者都深有体会。特别是使用CC2530这类资源受限的芯片时&#x…...

MySQL中如何利用SIGN函数判断符号_MySQL符号函数用法

...

3大系统平台实战:跨平台工具部署完全指南

3大系统平台实战&#xff1a;跨平台工具部署完全指南 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 让我们探索一个技术开发者和系统…...

三步解锁你的加密音乐:ncmdumpGUI让网易云音乐重获自由

三步解锁你的加密音乐&#xff1a;ncmdumpGUI让网易云音乐重获自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾遇到过这样的困境&#xff1a;在网…...

终极显卡驱动清理大师:Display Driver Uninstaller(DDU)完整使用指南

终极显卡驱动清理大师&#xff1a;Display Driver Uninstaller&#xff08;DDU&#xff09;完整使用指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mir…...

Qwen3.5-4B-AWQ部署教程:systemd替代supervisor的高可用方案

Qwen3.5-4B-AWQ部署教程&#xff1a;systemd替代supervisor的高可用方案 1. 项目概述 Qwen3.5-4B-AWQ-4bit是阿里云通义千问团队推出的轻量级稠密模型&#xff0c;经过4bit AWQ量化后显存占用仅约3GB&#xff0c;使得RTX 3060/4060等消费级显卡也能流畅运行。这款模型在保持轻…...

Mac微信防撤回插件终极指南:完整保护你的重要对话内容

Mac微信防撤回插件终极指南&#xff1a;完整保护你的重要对话内容 【免费下载链接】WeChatIntercept 微信防撤回插件&#xff0c;一键安装&#xff0c;仅MAC可用&#xff0c;支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 你是否曾经因为…...

nli-MiniLM2-L6-H768基础教程:从BERT到MiniLM2的NLI模型演进

nli-MiniLM2-L6-H768基础教程&#xff1a;从BERT到MiniLM2的NLI模型演进 1. 认识自然语言推理(NLI) 自然语言推理(Natural Language Inference)是自然语言处理中的一项基础任务&#xff0c;它需要判断两个句子之间的逻辑关系。想象一下&#xff0c;这就像老师在批改作业时&am…...

3DMAX插件避坑指南:Geometry Projection几何投影安装后没反应?可能是你的‘标准基本体’没转换

3DMAX插件避坑指南&#xff1a;Geometry Projection几何投影安装后没反应&#xff1f;可能是你的‘标准基本体’没转换 当你第一次在3DMAX中安装Geometry Projection插件时&#xff0c;那种期待感是难以言喻的。这个能够将对象顶点精确投影到目标表面的工具&#xff0c;本应成…...