springboot simple (13) springboot Elasticsearch(Elasticsearch8.5.1)
这里首先简单的介绍了Elasticsearch,然后实现了springboot集成Elasticsearch。
版本:
Elasticsearch:v8.5.1
Kibana:v8.5.1
springboot集成elasticsearch有两种方式。
1)rest客户端RestHingLevelClient;
2)接口ElasticSearchRepository。
这里采用第1种方式。
1 Elasticsearch简介
ElasticSearch是一个基于Apache Lucene的开源搜索引擎。
Kibana 是一个开源分析和可视化平台,旨在可视化操作 Elasticsearch。
也就是说:
ElasticSearch 只是后台程序,没有界面;
Kibana是ElasticSearch对应的前端。
主要术语:
- 索引(Index)
索引是具有某种相似特征的文档的集合。例如,客户数据索引,产品目录索引,以及订单数据索引。 - 文档(document)
文档是可以被索引的基本单位。文档使用JSON表示。
2 springboot 集成Elasticsearch
Elasticsearch已支持Index(索引)、Document(文档)、Graph(图)、Machine learning(机器学习)等。
这里介绍了Index(索引)、Document(文档)的简单使用。
第1步:pom中引入依赖的包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>3.0.2</version></dependency>
第2步:application.properties设置相关参数:
server.port =8081spring.data.elasticsearch.repositories.enabled = true
spring.data.elasticsearch.cluster-nodes = localhost:9300spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=123456
spring.elasticsearch.rest.uris=localhost:9200
第3步:对应的配置类ElasticSearchConfig.java:
@Component
@Configuration
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {@Value("${spring.elasticsearch.rest.uris}")private String uris ;@Value("${spring.elasticsearch.rest.username}")private String username;@Value("${spring.elasticsearch.rest.password}")private String password ;@Override@Bean(destroyMethod = "close")public RestHighLevelClient elasticsearchClient() {final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(uris).withBasicAuth(username, password).build();return RestClients.create(clientConfiguration).rest();}
}
第4步:实现index的工具类IndexUtil.java:
@Component
public class IndexUtil {@Autowiredprivate RestHighLevelClient restHighLevelClient;/*** 创建索引index* @param index* @return* @throws IOException*/public boolean createIndex(String index){if (!isIndexExist(index)) {return false;}boolean isAcknowledged = false;CreateIndexRequest createIndexRequest = new CreateIndexRequest(index);try {AcknowledgedResponse acknowledgedResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);isAcknowledged = acknowledgedResponse.isAcknowledged();} catch (IOException e) {e.printStackTrace();} finally {return isAcknowledged;}}/*** 删除索引* @param index* @return* @throws IOException*/public boolean deleteIndex(String index){if (!isIndexExist(index)) {return false;}boolean isAcknowledged = false;DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(index);try {AcknowledgedResponse acknowledgedResponse = restHighLevelClient.indices().delete(deleteIndexRequest,RequestOptions.DEFAULT);isAcknowledged = acknowledgedResponse.isAcknowledged();} catch (IOException e) {e.printStackTrace();} finally {return isAcknowledged;}}/*** 判断索引是否存在* @param index* @return* @throws IOException*/public boolean isIndexExist(String index) {boolean isExist = false;try {GetIndexRequest getIndexRequest = new GetIndexRequest(index);isExist = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();} finally {return isExist;}}
}
第5步:实现document的工具类DocumentUtil.java:
@Component
public class DocumentUtil {@Autowiredprivate RestHighLevelClient restHighLevelClient;/*** 添加document* @param object* @param index* @param id* @return*/public void addDocument(Object object, String index,String id){//1 create IndexRequestIndexRequest indexRequest = new IndexRequest(index);indexRequest.id(id);indexRequest.timeout(TimeValue.timeValueSeconds(1));String content = JSON.toJSONString(object);indexRequest.source(content, XContentType.JSON);try {//2 send IndexRequestIndexResponse indexResponse =restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}}/*** 添加document,随机id* @param object* @param index* @return*/public void addDocument(Object object, String index){String id= "";id = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();addDocument(object, index, id);}/*** get Document* @param index* @param id* @return*/public GetResponse getDocumnet(String index,String id){GetResponse getResponse = null;GetRequest getRequest = new GetRequest(index, id);try {getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);}catch (IOException e){e.printStackTrace();} finally {return getResponse;}}/*** update document* @param object* @param index* @param id*/public void updateDocument(Object object, String index,String id){//1 create UpdateRequestUpdateRequest updateRequest = new UpdateRequest(index,id);updateRequest.timeout(TimeValue.timeValueSeconds(1));String content = JSON.toJSONString(object);updateRequest.doc(content, XContentType.JSON);try {//2 send UpdateRequestUpdateResponse updateResponse =restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}}/*** 删除Document* @param index* @param id*/public void deleteDocument(String index,String id){//1 create DeleteRequestDeleteRequest deleteRequest = new DeleteRequest(index, id);try {//2 send DeleteRequestDeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}}public SearchResponse search(String index, TermQueryBuilder termQueryBuilder){//1 create SearchRequestSearchRequest searchRequest = new SearchRequest(index);//2 create SearchSourceBuilderSearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));//3 查询条件放入SearchRequestsearchRequest.source(searchSourceBuilder);//4 send SearchRequestSearchResponse searchResponse = null;try {searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();} finally {return searchResponse;}}public SearchResponse searchHighLight(String index, TermQueryBuilder termQueryBuilder){//1 create SearchRequestSearchRequest searchRequest = new SearchRequest(index);//2 create SearchSourceBuilderSearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.highlighter();searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));//3 查询条件放入SearchRequestsearchRequest.source(searchSourceBuilder);//4 send SearchRequestSearchResponse searchResponse = null;try {searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();} finally {return searchResponse;}}
}
3 测试验证
前提:安装运行ElasticSearch和Kibana。
第1步:创建index,postman发送请求:
然后,Kibana中输入:
GET /_cat/indices?v
查询到index创建成功。
第2步:创建Document,postman发送请求:
然后,Kibana中输入:
GET heroic/_doc/1
查询到Document创建成功。
第3步:查询Document,postman发送请求:
第4步:修改Document,将name“关羽”改为“刘备”;
postman发送请求:
然后,Kibana中输入:
GET heroic/_doc/1
查询到Document修改成功。
第5步:删除Document,postman发送请求:
然后,Kibana中输入:
GET heroic/_doc/1
查询到Document删除成功。
代码详见:
https://gitee.com/linghufeixia/springboot-simple
chapter9-1
教程列表:
springboot simple(0) springboot简介
springboot simple(1) springboot Helloworld
springboot simple(2) springboot Starter
springboot simple(3 )springboot Web开发
springboot simple(4)springboot 数据持久化
springboot simple (5) springboot Nosql
springboot simple (6) springboot mqtt
springboot simple (7) springboot thrift
springboot simple (8) springboot kafka
springboot simple (9) springboot jpa(Hibernate)
springboot simple (10) springboot protobuf
springboot simple (11) springboot protostuff
springboot simple (12) springboot RabbitMQ
springboot simple (13) springboot Elasticsearch
相关文章:
springboot simple (13) springboot Elasticsearch(Elasticsearch8.5.1)
这里首先简单的介绍了Elasticsearch,然后实现了springboot集成Elasticsearch。 版本: Elasticsearch:v8.5.1 Kibana:v8.5.1 springboot集成elasticsearch有两种方式。 1)rest客户端RestHingLevelClient; …...
《爆肝整理》保姆级系列教程python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 json 格式的,我们在做判断时候,往往只…...
分享111个HTML旅游交通模板,总有一款适合您
分享111个HTML旅游交通模板,总有一款适合您 111个HTML旅游交通模板下载链接:https://pan.baidu.com/s/1VHJSBVJbj4PQpPAwxysJBg?pwd8b17 提取码:8b17 Python采集代码下载链接:采集代码.zip - 蓝奏云 汽车租赁平台网页模板 汽…...
guava中ImmutableList使用示例详解
ImmutableList是一个不可变、线程安全的列表集合,它只会获取传入对象的一个副本,而不会影响到原来的变量或者对象,如下代码: int a 23;ImmutableList<Integer> list ImmutableList.of(a, 12);System.out.println(list);a …...
ASE28N50-ASEMI高压N沟道MOS管ASE28N50
编辑-Z ASE28N50在TO-247封装里的静态漏极源导通电阻(RDS(ON))为200mΩ,是一款N沟道高压MOS管。ASE28N50的最大脉冲正向电流ISM为110A,零栅极电压漏极电流(IDSS)为1uA,其工作时耐温度范围为-55~150摄氏度。ASE28N50功…...
MyBatis缓存
文章目录MyBatis的缓存1、缓存概述2、MyBatis的一级缓存2.1 一级缓存的使用2.2 一级缓存的失效3、MyBatis的二级缓存3.1 二级缓存的开启3.2 二级缓存的失效3.2 二级缓存相关配置4、系统缓存的查询顺序5、EHCache的使用5.1 EHCache基本介绍5.2 EHCache的基本使用5.3 EHCache配置…...
Linux环境下(CentOS 7)安装Java(JDK8)
Linux环境下(CentOS 7)安装Java(JDK8) 一、安装教程 1.1 首先,进入oracle官网下载jdk8的安装包,下载地址如下,这里以 jdk-8u121-linux-x64.tar.gz安装包为例。 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21…...
基于STM32L431+Liteos的串口空闲中断加DMA循环接收
①MCU为STM32L431,使用串口2。 ②Liteos采用接管中断的方式。 STM32CubeMX配置生成串口代码: 串口DMA接收和发送配置区别是接收采用循环模式,发送为正常模式。 将生成的代码移植到liteos工程中,由于使用的接管中断的方式&#…...
BZOJ4403 序列统计
题目描述 给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对106310^631063取模的结果。 输入 输入第一行包含一个整数T,表示数据组数。 第2到第T1行每行包含三个整数N、L和R,N、…...
如何正确使用 钳位二极管
在电路设计中,经常遇到需要IO保护的场景,比如ADC采样,GPIO接收电平信号等。 常见的保护方法有分压,限幅,限流等。本次我们讨论限幅方法中的 钳位二极管。 我们以BAT54S为例,它的符号是这样的, 而在很多手册里,我们可以看到,一般是这样使用的: 因此,我设计了简化…...
【C语言进阶】动态内存管理
👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...
第一批因ChatGPT坐牢的人,已经上路了
大家好,我是 Jack。 ChatGPT 的火爆有目共睹,有人靠着它赚了第一桶金,也有人靠着它即将吃上第一顿牢饭。 任何一件东西的火爆,总会给一些聪明人带来机会。 艾尔登法环火的时候,一堆淘宝卖魂的;羊了个羊火…...
Eclipse下Maven的集成
Eclipse下Maven的集成 2.1指定本地maven环境 参考:Eclipse的Maven创建_叶书文的博客-CSDN博客_eclipse创建maven项目 指定用本地maven指定maven仓库设置和地址2.2创建maven项目 1.新建 2.目录设置 3.坐标设置(随便写就行) 4.目录结构 2.3配置…...
Elasticsearch7学习笔记(尚硅谷)
文章目录一、ElasticSearch概述1、ElasticSearch是什么2、全文搜索引擎3、ElasticSearch 和 Solr3.1 概述3.2 比较总结二、Elasticsearch入门1、Elasticsearch安装1.1 下载使用1.2 数据格式2、索引操作3、文档操作(了解)3.1 创建文档3.2 文档查询3.3 文档…...
前端学习第一阶段-第7章 品优购电商项目
7-1 品优购项目介绍及准备工作 01-品优购项目导读 02-网站制作流程 03-品优购项目规划 04-品优购项目搭建 05-品优购项目-样式的模块化开发 06-品优购项目-favicon图标制作 07-品优购项目-TDK三大标签SEO优化 7-2 首页Header区域实现 08-品优购首页-快捷导航shortcut结构搭建 0…...
cocos2dx 4.0 - cpp - pc版 环境搭建
开发环境vs2022 cocos2dx4.0 python2.7.18 cmake3.25安装教程(环境搭建)安装VS2022-Community, 勾选c进行安装安装cmake3.25, 勾选环境变量进行安装安装python2.7.18, 勾选环境变量进行安装下载cocos2dx4.0并解压配置cocos2dx:运行cmd,进入…...
剑指 Offer 53 - I. 在排序数组中查找数字 I
原题链接 难度:easy\color{Green}{easy}easy 题目描述 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0提示: 0<nums.length<1050 <…...
华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 热点网络统计 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 查找单入口空闲区域 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 好朋友 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 找出同班小朋友 | 备考思路,刷题要点…...
PowerShell Install Office 2021 Pro Plus Viso Professional
前言 微软Office在很长一段时间内都是最常用和最受欢迎的软件。从小型创业公司到大公司,它的使用比例相当。它可以很容易地从微软的官方网站下载。但是,微软只提供安装程序,而不提供完整的软件供下载。这些安装文件通常比较小。下载并运行后,安装的文件将从后端服务器安装M…...
KubeSphere实战
文章目录一、KubeSphere平台安装1、Kubernetes上安装KubeSphere1.1 安装docker1.2 安装Kubernetes1.3 前置环境之nfs存储1.4 前置环境之metrics-server1.5 安装KubeSphere2、Linux单节点部署KubeSphere3、Linux多节点部署KubeSphere(推荐)二、KubeSphere实战1、多租户实战2、中…...
Linux 简介
Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 …...
java面试题-泛型异常反射
泛型1.什么是泛型?Java是一种强类型语言,数据类型在编译时必须确定。如果我们想要在代码中使用不同类型的数据,那么就需要为每种类型分别写出相应的代码。这样会导致代码冗长、重复,也不便于维护。为了解决这个问题,Ja…...
详细解读ChatGPT:如何调用ChatGPT的API接口到官方例子的说明以及GitHub上的源码应用和csdn集成的ChatGPT
文章目录1. 解读ChatGPT1.1 词语解释1.2 功能解读2. GitHub上ChatGPT的应用源码3. 调用ChatGPT的API4. 官方例子说明5. 集成ChatGPT自ChatGPT出来到如今,始终走在火热的道路上,如今日活用户破亿,他为何有如此大的魅力,深受广大用户…...
九龙证券|最新评级情况出炉,机构扎堆这一板块!聚氨酯龙头获得最多关注
本周算计254家上市公司获组织“买入型”评级。 电子板块评级组织扎堆 证券时报数据宝计算,2月13日至17日,A股市场53家组织算计进行347次评级,254家上市公司获“买入型”评级(包含买入、增持、强烈推荐、推荐)。 从申…...
考研复试机试 | C++ | 尽量不要用python,很多学校不支持
目录1.1打印日期 (清华大学上机题)题目:代码:1.2改一改:上一题反过来问题代码:2.Day of Week (上交&&清华机试题)题目:代码:3.剩下的树(清…...
ChatGPT时代,别再折腾孩子了
今天这篇完全是从两件事儿有感而发。昨天在文印店,在复印机上看到装订好的几页纸,我瞥了一眼,是历史知识点:隋朝大运河分为四段,分别是___ ___ ___ ___,连接了五大河___ ___ ___ ___ ______ 年ÿ…...
万字干货 | 荔枝魔方基于云原生的架构设计与实践
近年来,荔枝集团在国内和海外的业务迅速发展,业务数据规模也是成几何式地增长,海量数据的计算分析场景、业务智能算法应用需求随之而生,为了快速地满足业务发展的需要,我们面临着诸多的技术挑战。技术挑战工程问题资源…...
#科研筑基# python初学自用笔记 第九篇 面向对象编程
面向对象编程 Object Oriented Programming ,简称OOP,是一种程序设计思想,这种思想把对象作为程序的基本单元。类是抽象的,对象是具体的,一种类包括其特定的数据或属性,以及操作数据的函数(方法…...
Python快速上手系列--邮件发送--详解篇
本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。zmail操作:1. 导包 import zmail2. 邮件内容,包含:主题(subject)、正文(content_text)、附件(attachments)3. 发件人信息,包含:发件人账号&…...
【Bluetooth开发】蓝牙开发入门
BLE 蓝牙设备在生活中无处不在,但是我们也只是将其作为蓝牙模块进行使用,发送简单的AT命令实现数据收发。 那么,像对于一些复杂的使用场合:“车载蓝牙”、"智能手表"、“蓝牙音箱”等,我们不得不去了解底层…...
旅游网站建设的现状/厦门seo结算
AutoCAD图纸中的图纸信息一般被做成一个属性图块,当需要生成图纸目录时,可以通过“数据提取”功能来实现。运行数据提取命令后,新建数据提取文件以便日后进行修改,可以保存至电脑硬盘中的任意位置。定义数据源: 选择需…...
去空格网站/指数平台
function C($name,$method){ require_once(libs/Controller/.$name.Controller.class.php); eval($obj new .$name.Controller();$obj ->.$method.();); } $name:控制器名字 $method:方法名字转载于:https://www.cnblogs.com/wangshuyi/p/6505575.html...
网站建设进度表 免费下载/b站推广
城市快报记者许佳“315”之际,腾讯手机管家发布的《手机短信病毒个人隐私泄漏报告》显示,信息时代隐私泄露渠道呈现多样化,个人隐私泄露防范难度大增。报告揭露了隐私泄露10大渠道,同时指出,每到周三、周四,…...
好网站制作/淘宝指数
首先在vue.config.js文件中添加 module.exports = {publicPath:“./”}1.vue项目npm run build 得到dist文件夹 dist文件夹内容示例 2.hbuilderX中创建空的5+APP项目 新建5+APP项目 3.将vue项目中dist文件夹下的内容全部拷贝粘贴到刚刚创建的5+APP项目文件夹下(重复的就…...
php标签wordpress/阿里云域名注册流程
对L的配二阶方阵有特征值则矩阵必有特征值为( )。设,内核,则.( )选用行编需要无线广播通信系统的工作方式为( )。设四阶方阵的秩为2,置方执行则其伴随阵的秩为2.( )设为矩阵,式进.( )若向量空间为的子空间,对L的配则.(…...
在什么网站上可以做免费广告/强化防疫指导
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的…...