Elasticsearch 客户端

本章展示了支持的 Elasticsearch 客户端实现的配置和使用方法。spring-doc.cadn.net.cn

Spring Data Elasticsearch 运行在一个由 Elasticsearch 客户端库提供、连接到单个 Elasticsearch 节点或集群的客户端上。 虽然 Elasticsearch 客户端可以直接用于与集群协作,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch作Elasticsearch 仓库的高级抽象。spring-doc.cadn.net.cn

命令式休息客户端

要使用命令式(非响应式)客户端,必须配置配置如下:spring-doc.cadn.net.cn

import org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration;

@Configuration
public class MyClientConfig extends ElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder()           (1)
			.connectedTo("localhost:9200")
			.build();
	}
}
1 关于构建方法的详细描述,请参见客户端配置

ElasticsearchConfiguration] 类允许通过覆盖例如jsonpMapper()transportOptions()方法。spring-doc.cadn.net.cn

以下豆子随后可以注入其他Spring成分中:spring-doc.cadn.net.cn

import org.springframework.beans.factory.annotation.Autowired;@Autowired
ElasticsearchOperations operations;      (1)

@Autowired
ElasticsearchClient elasticsearchClient; (2)

@Autowired
RestClient restClient;                   (3)

@Autowired
JsonpMapper jsonpMapper;                 (4)
1 一个实现弹性搜索作
2 co.elastic.clients.elasticsearch.ElasticsearchClient那是被使用的。
3 低层级Rest客户端来自Elasticsearch库
4 JsonpMapper用户通过Elasticsearch获得运输

基本上,应该直接使用弹性搜索作以与 Elasticsearch 集互。 使用仓库时,这个实例也会在底层使用。spring-doc.cadn.net.cn

响应式休息客户端

在处理响应式栈时,配置必须从不同的类别中推导出来:spring-doc.cadn.net.cn

import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchConfiguration;

@Configuration
public class MyClientConfig extends ReactiveElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder()           (1)
			.connectedTo("localhost:9200")
			.build();
	}
}
1 关于构建方法的详细描述,请参见客户端配置

ReactiveElasticsearch配置类允许通过覆盖例如的进一步配置jsonpMapper()transportOptions()方法。spring-doc.cadn.net.cn

以下豆子随后可以注入其他Spring成分中:spring-doc.cadn.net.cn

@Autowired
ReactiveElasticsearchOperations operations;      (1)

@Autowired
ReactiveElasticsearchClient elasticsearchClient; (2)

@Autowired
RestClient restClient;                           (3)

@Autowired
JsonpMapper jsonpMapper;                         (4)

可以注入以下内容:spring-doc.cadn.net.cn

1 一个实现响应式弹性搜索作
2 org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient那是被使用的。 这是一个基于Elasticsearch客户端实现的响应式实现。
3 低层级Rest客户端来自Elasticsearch库
4 JsonpMapper用户通过Elasticsearch获得运输

基本上,应该直接使用响应式弹性搜索作以与 Elasticsearch 集互。 使用仓库时,这个实例也会在底层使用。spring-doc.cadn.net.cn

客户端配置

客户端行为可以通过ClientConfiguration允许设置SSL、连接和套接字超时、头部及其他参数的选项。spring-doc.cadn.net.cn

例子1。客户端配置
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.support.HttpHeaders;

import static org.springframework.data.elasticsearch.client.elc.ElasticsearchClients.*;

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)
    ElasticsearchHttpClientConfigurationCallback.from(clientBuilder -> {
  	  // ...
      return clientBuilder;
  	}))
  . // ... other options
  .build();
1 如果需要自定义,请定义默认头部
2 使用构建器提供集群地址,设置默认值HttpHeaders或启用SSL。
3 可选地启用SSL。存在该函数的过载,可以承受SSLContext或者作为替代,使用Elasticsearch 8启动时输出的证书指纹。
4 可以选择设置代理。
5 可选地设置路径前缀,主要用于不同集群在某个反向代理后面。
6 设置连接超时。
7 设置插槽超时。
8 可选地设置头部。
9 添加基本认证。
10 一个Supplier<HttpHeaders>可以指定一个函数,每次请求发送到 Elasticsearch 前都会调用——这里的示例是将当前时间写入一个头部。
11 配置创建客户端的功能(参见客户端配置回调)可以被多次添加。
如上示例所示添加头部提供商,可以注入可能随时间变化的头部,比如认证JWTTokens。 如果在响应式设置中使用此功能,提供商函数必须不会阻塞!

客户端配置回调

ClientConfiguration类提供了最常见的客户端配置参数。 如果这还不够,用户可以通过使用withClientConfigurer(ClientConfigurationCallback<?>)方法。spring-doc.cadn.net.cn

提供以下回调:spring-doc.cadn.net.cn

低层弹性搜索的配置Rest客户端:

该回调提供org.elasticsearch.client.RestClientBuilder可用于配置ElasticsearchRest客户端:spring-doc.cadn.net.cn

ClientConfiguration.builder()
    .connectedTo("localhost:9200", "localhost:9291")
    .withClientConfigurer(ElasticsearchClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
        // configure the Elasticsearch RestClient
        return restClientBuilder;
    }))
    .build();

低级 Elasticsearch 所用 HttpAsyncClient 的配置Rest客户端:

该回调提供org.apache.http.impl.nio.client.HttpAsyncClientBuilder配置 HttpCLient 是 被以下机构使用Rest客户端.spring-doc.cadn.net.cn

ClientConfiguration.builder()
    .connectedTo("localhost:9200", "localhost:9291")
    .withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
        // configure the HttpAsyncClient
        return httpAsyncClientBuilder;
    }))
    .build();

客户端日志

查看服务器实际发送和接收的内容请求 / 响应运输层的Logging需要按照下面的摘录方式开启。 这可以通过在 Elasticsearch 客户端中设置示 踪包裹对“trace”(参见 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.html)spring-doc.cadn.net.cn

启用传输层日志
<logger name="tracer" level="trace"/>