springboot集成elasticsearch(7.17.22)

官方文档地址:Javadoc | Elasticsearch Java API Client [7.17] | Elastic

springboot版本2.1.3

1.pom文件

以下是如何使用maven作为依赖关系管理器配置依赖关系。将以下内容添加到pom.xml文件中:

注:版本号一定要和elasticsearch的版本号保持一致!

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.22</version></dependency><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>7.17.22</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.0</version></dependency><dependency><groupId>jakarta.json</groupId><artifactId>jakarta.json-api</artifactId><version>2.0.1</version></dependency>
以下是如何使用gradle作为依赖关系管理器来配置依赖关系。将以下内容添加到build.gradle文件中:
dependencies {compile 'org.elasticsearch.client:elasticsearch-rest-client:7.17.23'
}

2.测试代码

public static void main(String[] args) throws IOException {final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("你的用户名", "你的密码"));RestClient restClient = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")).setHttpClientConfigCallback(httpAsyncClientBuilder -> {httpAsyncClientBuilder.disableAuthCaching();return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}).build();/*//设置需要与每个请求一起发送的默认标头,以防止必须在每个单独的请求中指定它们RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));Header[] defaultHeaders = new Header[]{new BasicHeader("header", "value")};builder.setDefaultHeaders(defaultHeaders);*/Request request = new Request("GET","/你的索引/_doc/索引id");
//        request.addParameter("pretty", "true"); //可以以name,value的方式添加多个参数,实际是在路径后边拼接的//也可以添加json参数
//        request.setEntity(new NStringEntity(
//                "{\"json\":\"text\"}",
//                ContentType.APPLICATION_JSON));//        request.setOptions(COMMON_OPTIONS);//performRequest 是同步的,当请求成功时将阻塞调用线程并返回Response,如果失败则抛出异常。Response response = restClient.performRequest(request);RequestLine requestLine = response.getRequestLine();HttpHost host = response.getHost();int statusCode = response.getStatusLine().getStatusCode();Header[] headers = response.getHeaders();if(statusCode == 200){String responseBody = EntityUtils.toString(response.getEntity());System.out.println(responseBody);}else{System.out.println("请求失败");}/*//performRequestAsync是异步的,它接受一个ResponseListener参数,当请求成功时,它会用Response调用该参数,如果请求失败,则用Exception调用该参数。restClient.performRequestAsync(request,new ResponseListener() {@Overridepublic void onSuccess(Response response) {//Handle the response}@Overridepublic void onFailure(Exception exception) {//Handle the failure}});*/restClient.close();}

3.分析

①:初始化

RestClient实例可以通过相应的RestClientBuilder类构建,该类是通过RestClient#builder(HttpHost…)静态方法创建的。唯一需要的参数是客户端将与之通信的一个或多个主机,作为HttpHost的实例提供,如下所示:

RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")).build();

RestClient类是线程安全的,理想情况下与使用它的应用程序具有相同的生命周期。重要的是,当不再需要时,它会被关闭,这样它使用的所有资源以及底层http客户端实例及其线程都会被正确释放:

restClient.close();

RestClientBuilder还允许在构建RestClient实例时可选地设置以下配置参数:

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
Header[] defaultHeaders = new Header[]{new BasicHeader("header", "value")};
builder.setDefaultHeaders(defaultHeaders); 

可以设置在每个单独的请求中都是用默认的请求头


RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
builder.setFailureListener(new RestClient.FailureListener() {@Overridepublic void onFailure(Node node) {//处理失败逻辑}
});

设置一个监听器,每次节点发生故障时都会收到通知,以防需要采取行动。启用故障嗅探时在内部使用。


RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
builder.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS); 

设置用于筛选客户端将向其发送请求的节点的节点选择器,这些节点设置为客户端本身。例如,这有助于防止在启用嗅探时向专用主节点发送请求。默认情况下,客户端向每个配置的节点发送请求。


RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {@Overridepublic RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {return requestConfigBuilder.setSocketTimeout(10000); }});

设置一个允许修改默认请求配置的回调(例如请求超时、身份验证或org.apache.http.client.config.RequestConfig.Builder允许设置的任何内容)


RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
builder.setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setProxy(new HttpHost("proxy", 9000, "http"));  }});

设置一个允许修改http客户端配置的回调(例如,通过ssl的加密通信,或org.apache.http.impl.nio.client.HttpAsyncClientBuilder允许设置的任何内容)


②执行请求

创建RestClient后,可以通过调用performRequest或performRequestAsync来发送请求。performRequest是同步的,当请求成功时将阻塞调用线程并返回Response,如果失败则抛出异常。performRequestAsync是异步的,它接受一个ResponseListener参数,当请求成功时,它会用Response调用该参数,如果请求失败,则用Exception调用该参数。

Request request = new Request("GET",  //请求方法GET, POST, HEAD等"/");   //uri
//同步
Response response = restClient.performRequest(request);

Request request = new Request("GET",  "/");   
Cancellable cancellable = restClient.performRequestAsync(request,new ResponseListener() {@Overridepublic void onSuccess(Response response) {//成功处理}@Overridepublic void onFailure(Exception exception) {//失败处理}
});

RequestOptions:

RequestOptions类包含应在同一应用程序中的多个请求之间共享的请求部分。您可以创建一个单例实例并在所有请求之间共享它:

private static final RequestOptions COMMON_OPTIONS;
static {RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();builder.addHeader("Authorization", "Bearer " + "你的token"); builder.setHttpAsyncResponseConsumerFactory(           new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));COMMON_OPTIONS = builder.build();
}

addHeader用于授权或在Elasticsearch前使用代理所需的标头。不需要设置Content-Type标头,因为客户端将从附加到请求的HttpEntity自动设置它。
您可以设置NodeSelector,它控制哪些节点将接收请求。节点选择器。SKIP_DEDICATED_MASTERS是一个不错的选择。
您还可以自定义用于缓冲异步响应的响应消费者。默认消费者将在JVM堆上缓冲高达100MB的响应。如果响应较大,则请求将失败。例如,您可以降低最大大小,如果您在如上例所示的堆约束环境中运行,这可能会很有用。
一旦你创建了单例,你就可以在发出请求时使用它:

request.setOptions(COMMON_OPTIONS);

③返回结果

Response对象由同步performRequest方法返回,或作为ResponseListener#onSuccess(Response)中的参数接收,它封装了http客户端返回的响应对象,并公开了一些其他信息。

Response response = restClient.performRequest(new Request("GET", "/"));
RequestLine requestLine = response.getRequestLine(); //已执行请求的信息
HttpHost host = response.getHost();  //响应主机的ip
int statusCode = response.getStatusLine().getStatusCode();  //响应code 200成功
Header[] headers = response.getHeaders();  //响应头
String responseBody = EntityUtils.toString(response.getEntity());  //返回结果

执行请求时,会抛出异常

I.IO异常
通信问题(例如SocketTimeout异常)

II.响应异常
返回了一个响应,但其状态代码指示错误(不是2xx)。ResponseException源自有效的http响应,因此它暴露了相应的response对象,该对象可以访问返回的响应。
对于返回404状态代码的HEAD请求,不会抛出ResponseException,因为这是一个预期的HEAD响应,只是表示找不到资源。除非ignore参数包含404,否则所有其他HTTP方法(例如GET)都会对404响应抛出ResponseException。ignore是一个特殊的客户端参数,它不会被发送到Elasticsearch,并且包含一个逗号分隔的错误状态代码列表。它允许控制某些错误状态代码是否应被视为预期响应而不是异常。例如,对于get-api来说,这很有用,因为当文档丢失时,它可以返回404,在这种情况下,响应体将不包含错误,而是通常的get-api响应,只是没有找到文档。

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

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

相关文章

IDEA2022配置JDK1.8版本与Maven3.3依赖包

第一步&#xff1a; 根据window / linux环境&#xff0c;安装不同IDEA2022 和 下载不同JDK1.8。 Maven依赖包可在不同环境共用&#xff0c;但需要更换Maven依赖包中conf > settings.xml。 第二步&#xff1a; 配置IEDA中JDK1.8版本 File > Project Structure > Proj…

如何使用JMeter的JSON提取器解析JSON响应

在性能测试和API测试中&#xff0c;经常需要处理JSON格式的数据。Apache JMeter提供了一个强大的工具——JSON提取器&#xff0c;用于从JSON响应中提取特定的值。本文将通过一个实际的例子&#xff0c;演示如何使用JMeter的JSON提取器来解析JSON响应。 背景 假设我们收到了一…

gevent 入门篇

gevent 入门篇 并发编程模型主要有: 多进程,多线程,事件驱动, 协程. gevent 是基于协程的异步框架,它需要依赖于greenlet.gevent有什么样的优势? 先来通过一个简单的例子对比同步执行一个方法和使用gevent的异步方式. 普通的单线程同步执行任务 import timedef sync_task()…

Chrome 渲染器中的对象转换到 RCE

在本文中,我将利用CVE-2024-5830,这是 Chrome 的 JavaScript 引擎 v8 中的一个类型混淆错误,我于 2024 年 5 月将其报告为错误 342456991。该错误已在版本126.0.6478.56/57中修复。此错误允许通过一次访问恶意网站在 Chrome 的渲染器沙箱中执行远程代码执行 (RCE)。 V8 中的…

前端Html5/Css3—div盒子模型

文章目录 第六章 盒子模型6.1 border边框6.2 border-width粗细6.3 border-style边框样式6.4 border简写6.5 margin外边距6.6 padding内边距6.7 盒子模型尺寸6.8 box-sizing6.9 border-radius圆角边框6.9.1 制作圆形6.9.2 半圆6.9.3 四分之一圆 6.10 box-shadow盒子阴影 第六章 …

速盾:中小企业网站cdn加速方案?

中小企业网站在如今的互联网时代中起到了非常重要的作用&#xff0c;能够帮助企业提升品牌形象、增加曝光度、吸引潜在客户等。然而&#xff0c;随着用户对网页加载速度的要求越来越高&#xff0c;网站的访问速度成为决定用户是否留在网站的关键因素之一。为了提升网站的访问速…

通过css,js html结合实现第一个页面

html以及 js代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link …

react调用子组件方法`TS2304: Cannot find name ‘Ref‘`

文章目录 发现宝藏1. 使用正确的 React.Ref 类型2. 使用 React.Ref 或 React.RefObject 作为 ref 类型3. 确保你的 tsconfig.json 设置正确总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

【机器学习】独立成分分析的基本概念、应用领域、具体实例(含python代码)以及ICA和PCA的联系和区别

引言 独立成分分析&#xff08;Independent Component Analysis&#xff0c;简称ICA&#xff09;是一种统计方法&#xff0c;用于从多个观察到的混合信号中提取出原始的独立信号源 文章目录 引言一、独立成分分析1.1 定义1.2 独立成分分析的基本原理1.3 独立成分分析的步骤1.3.…

Java重修笔记 第四十三天 Set 集合、HashSet 类

Set 接口 1. 它是无序的&#xff08;添加和取出的顺序不一致&#xff0c;但取出的结果是固定的&#xff09;&#xff0c;没有索引 2. Set 接口也是 Collection 的子接口&#xff0c;所以继承了 Collection 的方法 3. Set 接口的遍历方式有两种&#xff0c;迭代器和增强 for…

计算机专业的真正的就业情况

首先听到计算机行业&#xff0c;大多数人岗位已经饱和&#xff0c;前端已死&#xff0c;程序员35岁危机。但是事实上这些认知都是片面的&#xff0c;今天由我来为大家分析计算机行业的内幕。 疫情过后&#xff0c;过内各种行业都受到了冲击&#xff0c;你们敢说除了体制内的行业…

速盾:高防 CDN 如何提高电子商务网站的性能和用户体验?

随着电子商务的迅速发展&#xff0c;电子商务网站的性能和用户体验成为了至关重要的因素。其中&#xff0c;高防 CDN&#xff08;内容分发网络&#xff09;可以为电子商务网站提供很大的帮助&#xff0c;使其能够提高性能和用户体验。下面将详细介绍高防 CDN 如何实现这一目标。…

RACL: Adversarially Robust Neural Architectures

RACL: 对抗鲁棒网络架构 论文链接&#xff1a;https://arxiv.org/abs/2009.00902v2 Abstract 深度神经网络(DNN)容易受到对抗性攻击。现有的方法致力于开发各种鲁棒训练策略或正则化来更新神经网络的权值。但除了权重之外&#xff0c;网络中的整体结构和信息流是由网络架构明…

模块一(任务3):WDM系统原理解读

一、WDM的概念及波段划分 1、WDM系统概念 WDM系统就像高铁系统一样&#xff0c;这里可以将一根光纤看做是一个多车道的高速铁路。 把不同波长的光信号组合起来&#xff08;也就是复用&#xff09;&#xff0c;进入到同一根光纤中进行传输&#xff0c;在接收端将组合波长的光信…

图形学论文笔记

文章目录 PBD&#xff1a;XPBD&#xff1a;shape matching PBD&#xff1a; 【深入浅出 Nvidia FleX】(1) Position Based Dynamics 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 XPBD&…

​经​纬​恒​润​一​面​

1. 请尽可能详细地说明&#xff0c;浏览器有哪些本地存储方式&#xff0c;区别是什么&#xff0c;应用场景是什么&#xff1f;你的回答中不要写出示例代码。 浏览器提供了多种本地存储方式&#xff0c;主要包括以下几种&#xff1a; 1. Cookies 定义&#xff1a;Cookies 是一…

向量数据库Faiss的详细介绍和搭建使用教程

一、Faiss简介 向量数据库Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由Facebook AI研究院&#xff08;FAIR&#xff09;开发的一种高效的相似性搜索和聚类库。Faiss能够快速处理大规模数据&#xff0c;支持在高维空间中进行相似性搜索。它通过将候选向量集…

数据库mysql集群主从、高可用MGR、MHA技术详解

一、安装数据库mysql步骤 环境&#xff1a;红帽7.9系统 安装依赖 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y 将下载的MySQL软件包解压并cd到mysql的目录下 [rootmysql-node10 ~]# tar zxf mysq…

数据结构(邓俊辉)学习笔记】优先级队列 08——左式堆:结构

文章目录 1. 第一印象2. 堆之合并3. 奇中求正4. NPL5. 左倾性6. 左展右敛 1. 第一印象 在学习过常规的完全二叉堆之后&#xff0c;我们再来学习优先级队列的另一变种&#xff0c;也就是左式堆。所谓的左式堆&#xff0c;也就是在拓扑形态上更加倾向于向左侧倾斜的一种堆&#…

洛谷刷题(4)

P1089 [NOIP2004 提高组] 津津的储蓄计划 题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱&#xff0c;津津会预算这个月的花销&#xff0c;并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄&#xff0c;妈妈提出&#xff0c;津津可以随…