此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.4.0! |
Elasticsearch 客户端
本章说明了受支持的 Elasticsearch 客户端实现的配置和使用。
Spring Data Elasticsearch 在连接到单个 Elasticsearch 节点或集群的 Elasticsearch 客户端(由 Elasticsearch 客户端库提供)上运行。 尽管 Elasticsearch 客户端可以直接用于处理集群,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch Operations 和 Elasticsearch 存储库的更高级别抽象。
命令式 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 | 这JsonpMapper user 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 | 这JsonpMapper user by ElasticsearchTransport |
基本上,您应该只使用ReactiveElasticsearchOperations
与 Elasticsearch 集群交互。
使用存储库时,此实例也在后台使用。
客户端配置
客户端行为可以通过ClientConfiguration
允许设置 SSL、connect 和 socket 超时、标头和其他参数的选项。
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 函数不能阻塞! |
客户端配置回调
这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 到 “trace” (请参阅 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.html)
<logger name="tracer" level="trace"/>