背景:搜索引擎ElasticSearch8.X+SpringBoo3.X的用途如下
-
实时搜索功能:ElasticSearch是一个开源的实时分布式搜索和分析引擎,它能够实现高效的实时搜索功能。学习ElasticSearch可以帮助我们构建强大的搜索功能,提升用户体验和搜索效率,多数互联网公司里面用的技术,构建业务搜索/日志存储分析/可视化大屏
-
数据分析能力:ElasticSearch不仅仅可以用于搜索功能,还可以用于数据分析和数据可视化。学习ElasticSearch可以帮助我们深入了解数据分析的原理和方法,提升我们的数据分析能力。
-
分布式系统:ElasticSearch是一个分布式系统,可以在多个节点上分布数据和处理请求。学习ElasticSearch可以帮助我们了解分布式系统的设计和实现原理,提升我们的分布式系统开发能力。
-
Spring Boot和ElasticSearch的结合:Spring Boot是一个快速开发框架,可以帮助我们快速构建企业级应用程序。学习Spring Boot和ElasticSearch的结合可以帮助我们构建强大的搜索引擎应用程序,提升我们的开发效率。
-
有谁在用,进一线大厂(国内大厂多数都有用 ),国内:阿里、字节、腾讯 、微信、网易、虎牙、青云、新浪等;国外:谷歌、Facebook、亚马逊、苹果等;产品:维基百科、Github、StackOverFlow都是使用ElasticSearch存储数据
学完我们这个文章后的能力
-
ElasticStack8.X核心架构和应用场景,实战云服务器选购+Linux服务器源码安装
-
源码安装Kibana8.X+ES8.X常用命令操作,多案例实战Index和document核心操作
-
ES8.X映射Mapping定义和IK中文分词配置Query DSL多案例 match/match_all/filter/
-
match高级用法多字段匹配和短语搜索案例,单词纠错Fuzzy模糊查询和搜索高亮语法实战
-
Agg指标metric聚合搜索sum/avg/max/Trem/Range/Date Histogram多案例实战
-
新版SpringBoot3.X+ElasticSearch8.X整合多案例实战
什么是Elastic Stack?
学习ElasticSearch之前,需要知道下什么是Elastic Stack?是一个开源的数据分析和可视化平台,由Elasticsearch、Logstash、Kibana和Beats组成。
很多同学听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成,在发展的过程中有新成员Beats的加入,所以就形成了Elastic Stack,ELK是旧的称呼,Elastic Stack是新的名字
ElasticSearch:一个分布式实时搜索和分析引擎,高性能和可伸缩性闻名,能够快速地存储、搜索和分析大量结构化和非结构化数据,基于java开发,它是Elastic Stack的核心组件,提供分布式数据存储和搜索能力。
Logstash:是一个用于数据收集、转换和传输的数据处理引擎,支持从各种来源(如文件、日志、数据库等)收集数据;基于java开发,并对数据进行结构化、过滤和转换,然后将数据发送到Elasticsearch等目标存储或分析系统。
Kibana:基于node.js开发,数据可视化和仪表盘工具,连接到Elasticsearch,通过简单易用的用户界面创建各种图表、图形和仪表盘;帮助用户快速探索和理解数据,并进行强大的数据分析和可视化
ElasticSearch8.X核心概念
在新版Elasticsearch中,文档document就是一行记录(json),而这些记录存在于索引库(index)中, 索引名称必须是小写,下面对比关系性数据库Mysql,好轻松理解相关概念
分片shards:数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上,2ES提供把数据进行分片存储,这样方便进行拓展和提高吞吐
副本replicas:分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用,索引分片的备份,shard和replica一般存储在不同的节点上,用来提高可靠性
元数据:Elasticsearch中以 “ _” 开头的属性都成为元数据,都有自己特定的意思
ES默认为一个索引创建1个主分片和1个副本,在创建索引的时候使用settings属性指定,每个分片必须有零到多个副本
注意:索引一旦创建成功,主分片primary shard数量不可以变(只能重建索引),副本数量可以改变
Linux服务器源码安装JDK17+ElasticSearch8.X实战(结尾有安装包)
第一步:上传JDK17+ElasticSearch8.X相关安装包
第二步:安装JDK17
第三步:安装ElasticSearc8.X和配置相关
配置说明
启动ElasticSearch
常见命令,可以用postman访问(网络安全组记得开发端口)
常见问题
新版SpringBoot3.X整合ElasticSearch8.X
环境说明:本地 JDK17安装(SpringBoot3.X要求JDK17),没相关环境的可以去Oracle官网安装下JDK17,项目开发,快速创建 https://start.spring.io/
依赖包引入
ES官方针对java推出多个客户端进行接入ES,也分两种
-
更旧版的ES会用TransportClient(7.0版本标记过期)
-
Java Low Level REST Client(有继续迭代维护)
-
基于低级别的 REST 客户端,通过发送原始 HTTP 请求与 Elasticsearch 进行通信。
-
自己拼接好的字符串,并且自己解析返回的结果;兼容所有的Elasticsearch版本
-
-
Java High Level REST Client(7.1版本标记过期)
-
基于低级别 REST 客户端,提供了更高级别的抽象,简化了与 Elasticsearch 的交互。
-
提供了更易用的 API,封装了底层的请求和响应处理逻辑,提供了更友好和可读性更高的代码。
-
自动处理序列化和反序列化 JSON 数据,适用于大多数常见的操作,如索引、搜索、聚合等。
-
对于较复杂的高级功能和自定义操作,可能需要使用低级别 REST 客户端或原生的 Elasticsearch REST API
-
-
Java API Client(8.X版本开始推荐使用)
-
Elasticsearch在7.1版本之前使用的Java客户端是Java REST Client
-
从7.1版本开始Elastic官方将Java REST Client标记为弃用(deprecated),推荐使用新版Java客户端Java API Client
-
新版的java API Client是一个用于与Elasticsearch服务器进行通信的Java客户端库
-
封装了底层的Transport通信,并提供了同步和异步调用、流式和函数式调用等方法
-
Introduction | Elasticsearch Java API Client [8.5] | Elastic
-
-
SpringBoot3.X如何整合Elastic Search
方案一:使用 Elasticsearch 官方提供的高级客户端库 - Elasticsearch Api Client
方案二:使用 Spring Data Elasticsearch
SpringBoot3.X+ElasticsearchTemplate索引库操作
ElasticsearchTemplate,是 Spring Data Elasticsearch 提供的一个核心类,是 ElasticsearchClient 的一个具体实现,用于在 Spring Boot 中操作 Elasticsearch 进行数据的存取和查询,提供了一组方法来执行各种操作,如保存、更新、删除和查询文档,执行聚合操作等;
ElasticsearchTemplate 的一些常用方法
ElasticsearchTemplate 常见注解配置(都是属于spring data elasticsearch)
案例实战
SpringBoot3.X操作ES8.X文档document案例实战
案例一 新增文档
案例二 更新文档
案例三 批量插入
案例四 根据主键查询
案例五 根据id删除
进阶SpringBoot3.X+ES8.X多案例搜索实战
新版的ElasticSearch的Query接口,Query是Spring Data Elasticsearch的接口,有多种具体实现,新版官方文档缺少,这边看源码给案例实战
CriteriaQuery:创建Criteria来搜索数据,而无需了解 Elasticsearch 查询的语法或基础知识,允许用户通过简单地连接和组合,指定搜索文档必须满足的对象来构建查询
StringQuery:将Elasticsearch查询作为JSON字符串,更适合对Elasticsearch查询的语法比较了解的人,也更方便使用kibana或postman等客户端工具行进调试
NativeQuery:复杂查询或无法使用CriteriaAPI 表达的查询时使用的类,例如在构建查询和使用聚合的场景
新版的搜索语法案例,查询采用新版的lambda表达式语法,更简洁
案例一:搜索全部
案例二:匹配搜索
案例三:分页搜索
案例四:搜索排序,withSort() 需要传入 Sort 对象,.by代表根据一个字段进行排序
进阶SpringBoot3.X+ES8.X原始StringQuery搜索
StringQuery,将Elasticsearch查询作为JSON字符串,更适合对Elasticsearch查询的语法比较了解的人,也更方便使用kibana或postman等客户端工具行进调试
案例一:布尔must查询,搜索标题有 架构 关键词,描述有 spring关键字,时长范围是 10~6000之间的
案例二:统计不同分类下的视频数量
Elastic Search8.X常见性能优化最佳实践
官方数据Elastic Search最高的性能可以达到,PB级别数据秒内相应,但是很多同学公司的Elastic Search集群,里面存储了几百万或者几千万数据,但是ES查询就很慢了,记住,ES数量常规是亿级别为起点,之所以达不到官方的数据,多数是团队现有技术水平不够和业务场景不一样
Elastic Search8.X常见性能优化最佳实践
今天文章就先写到这里,还有很多内容下次继续,大家有任何疑惑也可以评论区留言
- SpringBoot3.X整合Elastic Search8.X集群
-
Elastic Search集群进行升级,不同大版本如何升级,索引读写不兼容,比如ElasticSearch5.X或6.X升级为8.X
-
业务一开始规划的索引分片、类型mapping分配不合理,原有数据量太大、分片数太少 ;原有数据量太小、分片数太多;ES索引分片,一旦创建,原索引是不能修改分片数量
-
Elasticsearch中搜索文档排序里面有个评分,表示相关性,按score得分从高到底排好序的结果集,机制上怎样的?
-
海量数据存储,但是有些数据很少方法,也占据比较高的存储资源,如何做冷热数据归档?
-
ES被称为可以实时的搜索NRT,ES索引分片写入原理是怎样的,为什么新加一条数据在下一秒就可以被搜索?
如果使用新版SpringBoot3.X+ElasticSearch8.X有任何疑惑,可以互相交流下
本文地址:http://midet.cs-ej.cn/quote/582.html 成事e家 http://midet.cs-ej.cn/ , 查看更多