Spring Data访问Elasticsearch(一)----Elasticsearch客户端

Spring Data访问Elasticsearch(一)----Elasticsearch客户端

本文演示了支持的Elasticsearch客户端实现的配置和使用。Spring Data Elasticsearch运行在一个连接到单个Elasticsearch节点或集群的Elasticsearch客户端上(由Elasticsearch客户端库提供)。虽然Elasticsearch客户端可以直接与集群一起工作,但使用Spring Data Elasticsearch的应用程序通常使用Elasticsearch操作和Elasticsearch存储库的更高级别抽象。

一、命令式Rest客户端

要使用命令式(非响应式)客户端,必须像这样配置bean:

java 复制代码
@Configuration
public class MyClientConfig extends ElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder()           --------1
			.connectedTo("localhost:9200")
			.build();
	}
}

1. 有关构建器方法的详细说明,请参见章节三客户端配置

ElasticsearchConfiguration类允许通过重写例如jsonpMapper()或transportOptions()方法进行进一步配置。

然后可以将以下beans注入到其他Spring组件中:

java 复制代码
ElasticsearchOperations operations;      --------1

@Autowired
ElasticsearchClient elasticsearchClient; --------2

@Autowired
RestClient restClient;                   --------3

@Autowired
JsonpMapper jsonpMapper;                 --------4

1. ElasticsearchOperations的一种实现
2. 使用的co.elastic.clients.elasticsearch.ElasticsearchClient。
3. Elasticsearch库中的低级RestClient
4. Elasticsearch传输的JsonpMapper用户

基本上,应该使用ElasticsearchOperations与Elasticsearch集群交互。当使用存储库(repositories)时,这个实例也在底层使用。

二、反应式(Reactive)Rest客户端

当使用反应式技术栈时,配置必须从另一个类派生:

java 复制代码
@Configuration
public class MyClientConfig extends ReactiveElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder()           --------1
			.connectedTo("localhost:9200")
			.build();
	}
}

1. 有关构建器方法的详细说明,请参见章节三客户端配置

ReactiveElasticsearchConfiguration类允许通过重写例如jsonpMapper()或transportOptions()方法进行进一步配置。

然后可以将以下bean注入到其他Spring组件中:

java 复制代码
@Autowired
ReactiveElasticsearchOperations operations;      --------1

@Autowired
ReactiveElasticsearchClient elasticsearchClient; --------2

@Autowired
RestClient restClient;                           --------3

@Autowired
JsonpMapper jsonpMapper;                         --------4

1. ReactiveElasticsearchOperations的一个实现
2. 使用的org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient。这是一个基于Elasticsearch客户端实现的反应式实现。
3. Elasticsearch库中的低级RestClient
4. Elasticsearch传输的JsonpMapper用户

基本上,应该只使用ReactiveElasticsearchOperations与Elasticsearch集群进行交互。当使用存储库(repositories)时,这个实例也在底层使用。

三、客户端配置

客户端行为可以通过ClientConfiguration更改,该ClientConfiguration允许设置SSL、connect和socket超时、headers和其他参数的选项。
例1:客户端配置

java 复制代码
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("some-header", "on every request") --------1                     

ClientConfiguration clientConfiguration = ClientConfiguration.builder()
  .connectedTo("localhost:9200", "localhost:9291") --------2                     
  .usingSsl()                                      --------3                     
  .withProxy("localhost:8888")                     --------4                     
  .withPathPrefix("ela")                           --------5                     
  .withConnectTimeout(Duration.ofSeconds(5))       --------6                     
  .withSocketTimeout(Duration.ofSeconds(3))        --------7                     
  .withDefaultHeaders(defaultHeaders)              --------8                     
  .withBasicAuth(username, password)               --------9                     
  .withHeaders(() -> {                             --------10                     
    HttpHeaders headers = new HttpHeaders();
    headers.add("currentTime", LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
    return headers;
  })
  .withClientConfigurer(                           --------11                     
    ElasticsearchClientConfigurationCallback.from(clientBuilder -> {
  	  // ...
      return clientBuilder;
  	}))
  . // ... other options
  .build();

1. 定义默认标头(如果需要自定义)
2. 使用构建器提供集群地址、设置默认HttpHeaders或启用SSL。
3. 可选地启用SSL。该函数存在重载,可以采用SSLContext,也可以在启动时由Elasticsearch 8输出证书指纹。
4. (可选)设置代理。
5. (可选)设置路径前缀,主要用于不同集群后面的一些反向代理。
6. 设置连接超时。
7. 设置socket超时。
8. (可选)设置headers。
9. 添加基本身份验证。
10. 可以指定一个Supplier<HttpHeaders>函数,该函数在每次向Elasticsearch发送请求之前都会被调用------例如,在这里,当前时间被写入标头中。
11. 可以多次添加一个用于配置创建的客户端的函数(请参阅3.1客户端配置回调)。

如上面的例子所示,添加Header supplier允许注入可能随时间变化的headers,比如身份验证JWT令牌。如果在反应式设置中使用此方法,则supplier函数不能阻塞!

3.1 客户端配置回调

ClientConfiguration类提供了用于配置客户端的最常见参数。如果这还不够,用户可以使用withClientConfigurer(ClientConfigurationCallback<?>)方法添加回调函数。

提供了以下回调:

3.1.1 底层Elasticsearch RestClient的配置:

3.1.2 底层Elasticsearch RestClient使用的HttpAsyncClient配置:

四、客户端日志

相关推荐
AC赳赳老秦1 分钟前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
BerryS3N20 分钟前
Code Git 工作树:多分支开发的痛点与工作树的曙光
大数据·git·elasticsearch
Elasticsearch3 小时前
Elastic 与 Deductive AI 携手合作,加速工程团队的 agent 式事件调查
elasticsearch
Elasticsearch3 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
elasticsearch
小K漫剧创作笔记3 小时前
AI短剧出海从「选修课」变「必修课」:合规分发正在成为内容全球化的真正门槛
大数据·人工智能·ai·aigc·漫剧
samLi06204 小时前
【数据集】中国“千兆城市”关键指标数据(2021-2023年)
大数据
城数派4 小时前
1991-2100年中国1km分辨率逐月气候指标栅格数据集(28个气象指标)
大数据
AC赳赳老秦4 小时前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
yurenshi16686 小时前
自媒体多账号管理工具 4 款实测:聚媒通 / 融媒宝 / 新榜小豆芽 / 矩阵通横向对比,快速选型
大数据·矩阵·媒体
nVisual7 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理