此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.4.0spring-doc.cadn.net.cn

Elasticsearch 客户端

本章说明了受支持的 Elasticsearch 客户端实现的配置和使用。spring-doc.cadn.net.cn

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

命令式 REST 客户端

要使用命令式(非反应式)客户端,必须像这样配置配置 Bean: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 有关 Builder 方法的详细说明,请参阅客户端配置

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

然后,可以将以下 bean 注入其他 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 的实现ElasticsearchOperations
2 co.elastic.clients.elasticsearch.ElasticsearchClient那是二手的。
3 低级RestClient从 Elasticsearch 库
4 JsonpMapperuser by ElasticsearchTransport

基本上,您应该只使用ElasticsearchOperations与 Elasticsearch 集群交互。 使用存储库时,此实例也在后台使用。spring-doc.cadn.net.cn

反应式 REST 客户端

当使用反应式堆栈时,配置必须从不同的类派生: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 有关 Builder 方法的详细说明,请参阅客户端配置

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

然后,可以将以下 bean 注入其他 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 的实现ReactiveElasticsearchOperations
2 org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient那是二手的。 这是基于 Elasticsearch 客户端实现的反应式实现。
3 低级RestClient从 Elasticsearch 库
4 JsonpMapperuser by ElasticsearchTransport

基本上,您应该只使用ReactiveElasticsearchOperations与 Elasticsearch 集群交互。 使用存储库时,此实例也在后台使用。spring-doc.cadn.net.cn

客户端配置

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

客户端配置回调

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

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

低级 Elasticsearch 的配置RestClient:

此回调提供了一个org.elasticsearch.client.RestClientBuilder,可用于配置 ElasticsearchRestClient: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 的配置RestClient:

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

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)spring-doc.cadn.net.cn

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

APP信息