本章介绍了受支持的 Elasticsearch 客户端实现的配置和用法。Spring中文文档

Spring Data Elasticsearch 在连接到单个 Elasticsearch 节点或集群的 Elasticsearch 客户端(由 Elasticsearch 客户端库提供)上运行。 虽然 Elasticsearch 客户端可以直接用于处理集群,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch OperationsElasticsearch 存储库的更高级别的抽象。Spring中文文档

命令式休息客户端

要使用命令式(非反应式)客户机,必须按如下方式配置配置 Bean:Spring中文文档

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 有关生成器方法的详细说明,请参阅客户端配置

该类允许通过重写 or 方法进行进一步配置。ElasticsearchConfigurationjsonpMapper()transportOptions()Spring中文文档

然后,可以将以下 Bean 注入到其他 Spring 组件中:Spring中文文档

import org.springframework.beans.factory.annotation.Autowired;@Autowired
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 用户通过 ElasticsearchJsonpMapperTransport

基本上,应该只使用 与 Elasticsearch 集群进行交互。 使用存储库时,此实例也在后台使用。ElasticsearchOperationsSpring中文文档

1 有关生成器方法的详细说明,请参阅客户端配置
1 实现ElasticsearchOperations
2 使用的。co.elastic.clients.elasticsearch.ElasticsearchClient
3 Elasticsearch 库中的低级别RestClient
4 用户通过 ElasticsearchJsonpMapperTransport

反应式休息客户端

使用反应式堆栈时,配置必须派生自不同的类:Spring中文文档

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 有关生成器方法的详细说明,请参阅客户端配置

该类允许通过重写 or 方法进行进一步配置。ReactiveElasticsearchConfigurationjsonpMapper()transportOptions()Spring中文文档

然后,可以将以下 Bean 注入到其他 Spring 组件中:Spring中文文档

@Autowired
ReactiveElasticsearchOperations operations;      (1)

@Autowired
ReactiveElasticsearchClient elasticsearchClient; (2)

@Autowired
RestClient restClient;                           (3)

@Autowired
JsonpMapper jsonpMapper;                         (4)

可以注入以下内容:Spring中文文档

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

基本上,应该只使用 与 Elasticsearch 集群进行交互。 使用存储库时,此实例也在后台使用。ReactiveElasticsearchOperationsSpring中文文档

1 有关生成器方法的详细说明,请参阅客户端配置
1 实现ReactiveElasticsearchOperations
2 使用的。 这是一个基于 Elasticsearch 客户端实现的响应式实现。org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient
3 Elasticsearch 库中的低级别RestClient
4 用户通过 ElasticsearchJsonpMapperTransport

客户端配置

客户端行为可以通过以下方式更改 允许设置 SSL、连接和套接字超时、标头和其他参数的选项。ClientConfigurationSpring中文文档

例 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 使用构建器提供集群地址、设置默认值或启用 SSL。HttpHeaders
3 (可选)启用 SSL。此函数存在重载,可以采用或替代证书的指纹,因为它由 Elasticsearch 8 在启动时输出。SSLContext
4 (可选)设置代理。
5 (可选)设置路径前缀,主要用于不同的集群在某个反向代理后面。
6 设置连接超时。
7 设置套接字超时。
8 (可选)设置标头。
9 添加基本身份验证。
10 可以指定一个函数,每次在向 Elasticsearch 发送请求之前都会调用该函数 - 例如,此处将当前时间写入标头中。Supplier<HttpHeaders>
11 可以多次添加配置已创建客户端的函数(参见客户端配置回调)。
如上例所示,添加标头供应商允许注入可能随时间变化的标头,例如身份验证 JWT 令牌。 如果在反应式设置中使用此功能,则供应商功能不得阻塞!

客户端配置回调

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

提供以下回调:Spring中文文档

低级 Elasticsearch 的配置:RestClient

此回调提供了一个可用于配置 Elasticsearch 的回调:org.elasticsearch.client.RestClientBuilderRestClientSpring中文文档

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

低级 Elasticsearch 使用的 HttpAsyncClient 的配置:RestClient

此回调提供了一个用于配置 HttpCLient 的 由 .org.apache.http.impl.nio.client.HttpAsyncClientBuilderRestClientSpring中文文档

ClientConfiguration.builder()
    .connectedTo("localhost:9200", "localhost:9291")
    .withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
        // configure the HttpAsyncClient
        return httpAsyncClientBuilder;
    }))
    .build();
1 定义默认标头(如果需要自定义)
2 使用构建器提供集群地址、设置默认值或启用 SSL。HttpHeaders
3 (可选)启用 SSL。此函数存在重载,可以采用或替代证书的指纹,因为它由 Elasticsearch 8 在启动时输出。SSLContext
4 (可选)设置代理。
5 (可选)设置路径前缀,主要用于不同的集群在某个反向代理后面。
6 设置连接超时。
7 设置套接字超时。
8 (可选)设置标头。
9 添加基本身份验证。
10 可以指定一个函数,每次在向 Elasticsearch 发送请求之前都会调用该函数 - 例如,此处将当前时间写入标头中。Supplier<HttpHeaders>
11 可以多次添加配置已创建客户端的函数(参见客户端配置回调)。
如上例所示,添加标头供应商允许注入可能随时间变化的标头,例如身份验证 JWT 令牌。 如果在反应式设置中使用此功能,则供应商功能不得阻塞!

客户端日志记录

要查看实际发送到服务器和从服务器接收的内容/需要打开传输级别的日志记录,如下面的代码片段所述。 这可以通过在 Elasticsearch 客户端中将包的级别设置为“trace”来启用(参见 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.htmlRequestResponsetracer)Spring中文文档

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