推广 热搜:   行业    设备  企业  上海  公司  系统  中国  机械 

一文掌握新版ElasticSearch8.X+SpringBoot3.X+JDK17最佳实践,常见搜索API使用和性能优化

   日期:2024-11-10     移动:http://hond.cs-ej.cn/quote/582.html

背景:搜索引擎ElasticSearch8.X+SpringBoo3.X的用途如下

  1. 实时搜索功能:ElasticSearch是一个开源的实时分布式搜索和分析引擎,它能够实现高效的实时搜索功能。学习ElasticSearch可以帮助我们构建强大的搜索功能,提升用户体验和搜索效率,多数互联网公司里面用的技术,构建业务搜索/日志存储分析/可视化大屏

    一文掌握新版ElasticSearch8.X+SpringBoot3.X+JDK17最佳实践,常见搜索API使用和性能优化

  2. 数据分析能力:ElasticSearch不仅仅可以用于搜索功能,还可以用于数据分析和数据可视化。学习ElasticSearch可以帮助我们深入了解数据分析的原理和方法,提升我们的数据分析能力。

  3. 分布式系统:ElasticSearch是一个分布式系统,可以在多个节点上分布数据和处理请求。学习ElasticSearch可以帮助我们了解分布式系统的设计和实现原理,提升我们的分布式系统开发能力。

  4. Spring Boot和ElasticSearch的结合:Spring Boot是一个快速开发框架,可以帮助我们快速构建企业级应用程序。学习Spring Boot和ElasticSearch的结合可以帮助我们构建强大的搜索引擎应用程序,提升我们的开发效率。

  5. 有谁在用,进一线大厂国内大厂多数都有用 ),国内:阿里、字节、腾讯 、微信、网易、虎牙、青云、新浪等;国外:谷歌、Facebook、亚马逊、苹果等;产品:维基百科、Github、StackOverFlow都是使用ElasticSearch存储数据

学完我们这个文章后的能力

  1. ElasticStack8.X核心架构和应用场景,实战云服务器选购+Linux服务器源码安装

  2. 源码安装Kibana8.X+ES8.X常用命令操作,多案例实战Index和document核心操作

  3. ES8.X映射Mapping定义和IK中文分词配置Query DSL多案例 match/match_all/filter/

  4. match高级用法多字段匹配和短语搜索案例,单词纠错Fuzzy模糊查询和搜索高亮语法实战

  5. Agg指标metric聚合搜索sum/avg/max/Trem/Range/Date Histogram多案例实战

  6. 新版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,好轻松理解相关概念

Mysql数据库Elastic SearchDatabase7.X版本前有Type,对比数据库中的表,新版取消了TableIndexRowdocumentColumnField

分片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,也分两种

  1. 更旧版的ES会用TransportClient7.0版本标记过期

  2. Java Low Level REST Client有继续迭代维护

    1. 基于低级别的 REST 客户端,通过发送原始 HTTP 请求与 Elasticsearch 进行通信。

    2. 自己拼接好的字符串,并且自己解析返回的结果;兼容所有的Elasticsearch版本

  3. Java High Level REST Client7.1版本标记过期

    1. 基于低级别 REST 客户端,提供了更高级别的抽象,简化了与 Elasticsearch 的交互。

    2. 提供了更易用的 API,封装了底层的请求和响应处理逻辑,提供了更友好和可读性更高的代码。

    3. 自动处理序列化和反序列化 JSON 数据,适用于大多数常见的操作,如索引、搜索、聚合等。

    4. 对于较复杂的高级功能和自定义操作,可能需要使用低级别 REST 客户端或原生的 Elasticsearch REST API

  4. Java API Client8.X版本开始推荐使用

    1. Elasticsearch在7.1版本之前使用的Java客户端是Java REST Client

    2. 从7.1版本开始Elastic官方将Java REST Client标记为弃用(deprecated,推荐使用新版Java客户端Java API Client

    3. 新版的java API Client是一个用于与Elasticsearch服务器进行通信的Java客户端库

    4. 封装了底层的Transport通信,并提供了同步和异步调用、流式和函数式调用等方法

      1. 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常见性能优化最佳实践

 

今天文章就先写到这里,还有很多内容下次继续,大家有任何疑惑也可以评论区留言

  1. SpringBoot3.X整合Elastic Search8.X集群
  2. Elastic Search集群进行升级,不同大版本如何升级,索引读写不兼容,比如ElasticSearch5.X或6.X升级为8.X

  3. 业务一开始规划的索引分片、类型mapping分配不合理,原有数据量太大、分片数太少 ;原有数据量太小、分片数太多;ES索引分片,一旦创建,原索引是不能修改分片数量

  4. Elasticsearch中搜索文档排序里面有个评分,表示相关性,按score得分从高到底排好序的结果集,机制上怎样的?

  5. 海量数据存储,但是有些数据很少方法,也占据比较高的存储资源,如何做冷热数据归档

  6. ES被称为可以实时的搜索NRT,ES索引分片写入原理是怎样的,为什么新加一条数据在下一秒就可以被搜索

如果使用新版SpringBoot3.X+ElasticSearch8.X有任何疑惑,可以互相交流下

本文地址:http://midet.cs-ej.cn/quote/582.html    成事e家 http://midet.cs-ej.cn/ , 查看更多

特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


相关行业动态
推荐行业动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号