最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

本章介绍了受支持的 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)
    ElasticsearchClientConfigurationCallback.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()
    .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()
    .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"/>