此版本仍在开发中,尚未被视为稳定版本。如需最新的稳定版本,请使用 Spring Data Elasticsearch 5.5.0

Elasticsearch 客户端

本章说明了受支持的 Elasticsearch 客户端实现的配置和使用。

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

命令式 REST 客户端

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

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

ElasticsearchConfiguration] 类允许进一步配置,例如,通过覆盖jsonpMapper()transportOptions()方法。

然后,可以将以下 bean 注入其他 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 低级RestClient从 Elasticsearch 库
4 JsonpMapperuser by ElasticsearchTransport

基本上,您应该只使用ElasticsearchOperations与 Elasticsearch 集互。 使用存储库时,此实例也在后台使用。

响应式 REST 客户端

当使用响应式堆栈时,配置必须从不同的类派生:

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

ReactiveElasticsearchConfiguration类允许进一步配置,例如,通过覆盖jsonpMapper()transportOptions()方法。

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

@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 低级RestClient从 Elasticsearch 库
4 JsonpMapperuser by ElasticsearchTransport

基本上,您应该只使用ReactiveElasticsearchOperations与 Elasticsearch 集互。 使用存储库时,此实例也在后台使用。

客户端配置

客户端行为可以通过ClientConfiguration允许设置 SSL、connect 和 socket 超时、标头和其他参数的选项。

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

客户端配置回调

ClientConfigurationclass 提供配置客户端的最常见参数。 如果这还不够,用户可以使用withClientConfigurer(ClientConfigurationCallback<?>)方法。

提供如下回调:

低级 Elasticsearch 的配置RestClient:

此回调提供了一个org.elasticsearch.client.RestClientBuilder,可用于配置 ElasticsearchRestClient:

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

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

此回调提供了一个org.apache.http.impl.nio.client.HttpAsyncClientBuilder来配置 HttpCLient,即 由RestClient.

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

客户端日志记录

查看实际发送到服务器和从服务器接收的内容Request / Response需要按照下面的代码段中所述打开传输级别的日志记录。 这可以在 Elasticsearch 客户端中启用,方法是将tracerpackage 到 “trace” (请参阅 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.html)

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