此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.5.2! |
Elasticsearch 客户端
本章说明了受支持的 Elasticsearch 客户端实现的配置和用法。
Spring Data Elasticsearch 在连接到单个 Elasticsearch 节点或集群的 Elasticsearch 客户端(由 Elasticsearch 客户端库提供)上运行。 尽管 Elasticsearch 客户端可以直接用于处理集群,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch Operations 和 Elasticsearch 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 | 有关构建器方法的详细说明,请参阅客户端配置 |
这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 | 这JsonpMapper 用户Transport |
基本上应该使用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 | 有关构建器方法的详细说明,请参阅客户端配置 |
这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 | 这JsonpMapper 用户Transport |
基本上应该使用ReactiveElasticsearchOperations
与 Elasticsearch 集互。
使用存储库时,此实例也在后台使用。
客户端配置
可以通过ClientConfiguration
允许设置 SSL、连接和套接字超时、标头和其他参数的选项。
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 | 配置已创建客户端的函数(请参阅客户端配置回调),可以多次添加。 |
如上例所示,添加标头提供商允许注入可能随时间变化的标头,例如身份验证 JWT Tokens。 如果在响应式设置中使用此功能,则提供商函数不得阻塞! |
客户端配置回调
这ClientConfiguration
class 提供了配置客户端的最常见参数。
如果这还不够,用户可以使用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 客户端中启用,方法是将tracer
package 进行“跟踪”(参见 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.html)
<logger name="tracer" level="trace"/>