Elasticsearch(二)集成Spring Boot 基本的API操作

目录

一、集成Spring Boot

 1、创建项目

2、pom文件 查看springboot集成的依赖

3、增加es的config类

二、索引相关API

1、创建索引

2、获取索引,判断其是否存在

3、删除索引

三、文档相关API

1、添加文档

2、获取文档,判断是否存在

3、获取文档信息

4、更新文档信息

5、删除文档信息

6、同文档批量导入数据

7、条件查询文档信息


一、集成Spring Boot

Java使用对应的rest风格调用ES是通过client依赖包进行操作的

配置需要的 maven 依赖

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.24</version>
</dependency>

 1、创建项目

如果创建项目后拉取不到对应依赖,springboot 可以选用低一些的稳定版本例如 2.3.2.RELEASE 版本

2、pom文件 查看springboot集成的依赖

(当然也可自定义ES版本)

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

3、增加es的config类

package com.example.elasticsearch_springboot_demo.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticSearchClientConfig {@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")));return client;}
}

二、索引相关API

1、创建索引

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】索引创建*/@Testvoid testCreateIndex() throws IOException {// 1、创建索引请求CreateIndexRequest request = new CreateIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行创建请求 并获得响应结果CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);// 3、查看响应结果System.out.println(createIndexResponse);}
}

2、获取索引,判断其是否存在

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】获取索引,判断其是否存在*/@Testvoid  testExistIndex() throws IOException {// 1、获取索引请求GetIndexRequest request = new GetIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行请求后获得是否存在结果boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 3、查看结果System.out.println(exists);}
}

3、删除索引

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【索引相关】删除索引*/@Testvoid  testDeleteIndex() throws IOException {// 1、删除索引请求DeleteIndexRequest request = new DeleteIndexRequest("m_index");// 2、客户端执行请求 IndicesClient,执行删除请求 并获得响应结果AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);// 3、查看结果System.out.println(delete.isAcknowledged());}
}

三、文档相关API

先定义一个User类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {private String name;private Integer age;}

1、添加文档

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】添加文档*/@Testvoid  testAddDocument() throws IOException {// 1、user对象User user = new User("marvin", 26);// 2、创建请求对象,并组装文档数据IndexRequest request = new IndexRequest("m_index");// 定义文档内容// 规则 put /m_index/_doc/1request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.timeout("1s");//将user数据放入请求jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);// 3、客户端发送请求,获取响应的结果IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);// 4、查看结果System.out.println(indexResponse.toString());// 对应的文档信息System.out.println(indexResponse.status());// 执行命令的返回状态}
}

2、获取文档,判断是否存在

get /index/doc/1

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】获取文档,判断是否存在 get /index/doc/1*/@Testvoid testIsExistsDocument() throws IOException {GetRequest getRequest = new GetRequest("m_index", "1");// 不获取返回的_source 的上下文getRequest.fetchSourceContext(new FetchSourceContext(false));getRequest.storedFields("_none_");boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);}
}

3、获取文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】获取文档信息*/@Testvoid testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("m_index", "1");GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);System.out.println(documentFields.getSourceAsString());// 打印文档内容System.out.println(documentFields);// 返回的全部内容和命令是一样的}
}

4、更新文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】更新文档信息*/@Testvoid testUpdateDocument() throws IOException {UpdateRequest updateRequest = new UpdateRequest("m_index", "1");updateRequest.timeout("1s");User user = new User("jerry", 28);updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);System.out.println(updateResponse.status());}
}

5、删除文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】删除文档信息*/@Testvoid testDeleteDocument() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("m_index", "1");deleteRequest.timeout("1s");DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());}
}

6、同文档批量导入数据

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 【文档相关】特殊的,批量导入数据*/@Testvoid  testBulkDocument() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");List<User> userList = new ArrayList<>();userList.add(new User("marvin1", 26));userList.add(new User("marvin2", 26));userList.add(new User("marvin3", 26));userList.add(new User("marvin4", 26));userList.add(new User("marvin5", 26));userList.add(new User("marvin6", 26));// 批处理请求for (int i=0; i<userList.size();i++){// 批量更新和批量删除,就再这里修改对应请求就可以了bulkRequest.add(new IndexRequest("m_index").id(""+(i+1)).source(JSON.toJSONString(userList.get(i)), XContentType.JSON));}BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulkResponse.hasFailures());// 是否失败,返回false 代表成功!}
}

7、条件查询文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;/*** 查询* searchRequest 搜索请求* SearchSourceBuilder 搜索条件构造*/@Testvoid testSearch() throws IOException {// 1、创建搜索请求SearchRequest searchRequest = new SearchRequest("m_index");// 2、构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();/*** 查询条件,可以使用QueryBuilders快速匹配*///精确匹配:termQueryTermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "marvin");//匹配所有MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 3、将查询条件放入请求searchRequest.source(sourceBuilder);// 4、执行请求SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 5、所有结果都封装在 SearchHits 里面,通过getHits()得到System.out.println(JSON.toJSONString(searchResponse.getHits()));System.out.println("===================================");//循环输出每一条数据结果为map结构for (SearchHit documentFields : searchResponse.getHits().getHits()){System.out.println(documentFields.getSourceAsMap());// 转换为map结构}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

深度学习:基于MindSpore实现ResNet50中药分拣

ResNet基本介绍 ResNet&#xff08;Residual Network&#xff09;是一种深度神经网络架构&#xff0c;由微软研究院的Kaiming He等人在2015年提出&#xff0c;并且在ILSVRC 2015竞赛中取得了很好的成绩。ResNet主要解决了随着网络深度增加而出现的退化问题&#xff0c;即当网络…

vulnhub-digitalworld.local DEVELOPMENT靶机

vulnhub&#xff1a;digitalworld.local: DEVELOPMENT ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 开了几个端口&#xff0c;8080端口有网页&#xff0c;访问 说是让访问html_pages 似乎把页面都写出来了&…

Unity网络开发基础 —— 实践小项目

概述 接Unity网络开发基础 导入基础知识中的代码 需求分析 手动写Handler类 手动书写消息池 using GamePlayer; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 消息池中 主要是用于 注册 ID和消息类…

JavaEE之多线程进阶-面试问题

一.常见的锁策略 锁策略不是指某一个具体的锁&#xff0c;所有的锁都可以往这些锁策略中套 1.悲观锁与乐观锁 预测所冲突的概率是否高&#xff0c;悲观锁为预测锁冲突的概率较高&#xff0c;乐观锁为预测锁冲突的概率更低。 2.重量级锁和轻量级锁 从加锁的开销角度判断&am…

ssm教师办公管理系统的设计与实现+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 JSP技…

大模型存储选型 JuiceFS 在关键环节性能详解

从去年开始&#xff0c;LLM大语言模型领域发展迅速、如 LLaMA、ChatGLM、Baichuan、Qwen 和 yi-model 等基础模型&#xff08;Foundation Models&#xff09;的数量显著增加。众多企业也开始基于这些基础模型做 post-training 的相关工作&#xff0c;以开发特定垂直领域的模型实…

一键生成二维码的源码系统 电脑+手机版自适应代码 带完整的安装代码包以及搭建部署教程

系统概述 一键生成二维码的源码系统是一款集二维码生成、管理和应用于一体的综合性平台。它采用先进的技术和算法&#xff0c;能够快速、准确地生成各种类型的二维码&#xff0c;包括文本、链接、图片等。同时&#xff0c;该系统还具备高度的灵活性和可扩展性&#xff0c;能够…

基于matlab变频器控制交流电机调速系统的设计与仿真(毕业论文)

目录 摘要 I ABSTRACT II 绪论 1 1交流调速技术发展概况 2 1.1电力电子器件 3 1.2变流技术 3 1.3变频调速的控制方式 4 1.4MATLAB/Simulink仿真介绍 4 2逆变电路的建模与仿真 5 2.1绝缘栅双极型晶体管 6 2.2三相桥式逆变电路的基本原理 6 2.3正弦脉冲宽度调制&#xff08;SPWM&…

六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询

本文基于六西格玛设计方法论&#xff0c;对消费级无人机的设计流程进行系统化研究&#xff0c;探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发&#xff0c;深入到关键KPI指标的制定&#xff0c;并逐步阐述…

【数字孪生智慧园区物联网平台建设】智慧园区整体解决方案和集成方案(PPT+Word+实现)

数字孪生智慧园区物联网平台建设 1. 安防监控 2. 消防系统 3. 巡更系统 4. 红外线系统 5. 车辆识别 6. 人流管理 7. 消防机房 8. 能耗管理 9. 配电室 10. 智能集成 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&…

【华为HCIP实战课程十】OSPF网络DR和BDR实战讲解,网络工程师

一、DR与BDR的基础介绍 点到点同步LSA成本小 多点接入网络同步LSA成本大,需要DR/BDR 由于MA网络中,任意两台路由器都需要传递路由信息,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源,DR和BDR应运而生!…

uibot发送邮件:自动化邮件发送教程详解!

uibot发送邮件的操作指南&#xff1f;uibot发送邮件的两种方式&#xff1f; 在现代办公环境中&#xff0c;自动化流程的引入极大地提高了工作效率。uibot发送邮件功能成为了许多企业和个人实现邮件自动化发送的首选工具。AokSend将详细介绍如何使用uibot发送邮件。 uibot发送…

使用Pytorch写简单线性回归

文章目录 Pytorch一、Pytorch 介绍二、概念三、应用于简单线性回归 1.代码框架2.引用3.继续模型(1)要定义一个模型&#xff0c;需要继承nn.Module&#xff1a;(2)如果函数的参数不具体指定&#xff0c;那么就需要在__init__函数中添加未指定的变量&#xff1a; 2.定义数据3.实例…

IP地址类型选择指南:动态IP、静态IP还是数据中心IP?

你是否曾经困惑于如何选择最适合业务需求的IP地址类型&#xff1f;面对动态IP、静态IP和数据中心IP这三种选择&#xff0c;你是否了解它们各自对你的跨境在线业务可能产生的深远影响&#xff1f; 在跨境电商领域&#xff0c;选择合适的IP类型对于业务的成功至关重要。动态IP、…

gitee开源商城diygw-mall

DIYGW可视化开源商城系统。所的界面布局显示都通过低代码可视化开发工具生成源码实现。支持集成微信小程序支付。 DIYGW可视化开源商城系统是一款基于thinkphp8 framework、 element plus admin、uniapp开发而成的前后端分离系统。 开源商城项目源码地址&#xff1a;diygw商城…

Java中String类的常见操作Api

目录 String类的常见操作 1).int indexOf (char 字符) 2).int lastIndexOf(char 字符) 3).int indexOf(String 字符串) 4).int lastIndexOf(String 字符串) 5).char charAt(int 索引) 6).Boolean endWith(String 字符串) 7).int length() 8).boolean equals(T 比较对象) 9).b…

区块链积分系统:重塑支付安全与商业创新的未来

在当今社会&#xff0c;数字化浪潮席卷全球&#xff0c;支付安全与风险管理议题日益凸显。随着交易频次与规模的不断扩大&#xff0c;传统支付体系正面临前所未有的效率、合规性和安全挑战。 区块链技术&#xff0c;凭借其去中心化、高透明度以及数据不可篡改的特性&#xff0c…

SSH 公钥认证:从gitlab clone项目repo到本地

这篇文章的分割线以下文字内容由 ChatGPT 生成&#xff08;我稍微做了一些文字上的调整和截图的补充&#xff09;&#xff0c;我review并实践后觉得内容没有什么问题&#xff0c;由此和大家分享。 假如你想通过 git clone git10.12.5.19:your_project.git 命令将 git 服务器上…

简单的maven nexus私服学习

简单的maven nexus私服学习 1.需求 我们现在使用的maven私服是之前同事搭建的&#xff0c;是在公司的一台windows电脑上面&#xff0c;如果出问题会比较难搞&#xff0c;所以现在想将私服迁移到我们公司的测试服务器上&#xff0c;此处简单了解一下私服的一些配置记录一下&am…