此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.4.0! |
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 | 有关 Builder 方法的详细说明,请参阅客户端配置 |
ElasticsearchConfiguration
] 类允许通过覆盖 or 方法进行进一步配置。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 | Elasticsearch 库中的 low 级别RestClient |
4 | Elasticsearch 的用户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 | 有关 Builder 方法的详细说明,请参阅客户端配置 |
ReactiveElasticsearchConfiguration
类允许通过覆盖 or 方法进行进一步配置。jsonpMapper()
transportOptions()
然后,可以将以下 bean 注入其他 Spring 组件中:
@Autowired
ReactiveElasticsearchOperations operations; (1)
@Autowired
ReactiveElasticsearchClient elasticsearchClient; (2)
@Autowired
RestClient restClient; (3)
@Autowired
JsonpMapper jsonpMapper; (4)
可以注射以下药物:
1 | ReactiveElasticsearchOperations 的实现 |
2 | 那个是用的。
这是基于 Elasticsearch 客户端实现的反应式实现。org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient |
3 | Elasticsearch 库中的 low 级别RestClient |
4 | Elasticsearch 的用户JsonpMapper Transport |
基本上,应该只使用 ReactiveElasticsearchOperations
与 Elasticsearch 集群进行交互。
使用存储库时,此实例也在后台使用。
客户端配置
客户端行为可以通过 ClientConfiguration 来更改,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 | 使用构建器提供集群地址、设置 default 或 enable SSL。HttpHeaders |
3 | (可选)启用 SSL。此函数存在重载,该重载可以采用证书的指纹或作为替代,因为它是 Elasticsearch 8 在启动时输出的。SSLContext |
4 | (可选)设置代理。 |
5 | (可选)设置路径前缀,主要在不同的集群后面使用某个反向代理。 |
6 | 设置连接超时。 |
7 | 设置套接字超时。 |
8 | (可选)设置 headers。 |
9 | 添加基本身份验证。 |
10 | 可以指定一个函数,每次在将请求发送到 Elasticsearch 之前都会调用该函数 - 例如,当前时间写入标头中。Supplier<HttpHeaders> |
11 | 配置创建的客户端的函数(参见 客户端配置回调),可以多次添加。 |
如上例所示,添加 Header 供应商允许注入可能随时间变化的 Headers,例如身份验证 JWT 令牌。 如果在响应式设置中使用了这个功能,则 supplier 函数不能阻塞! |
客户端配置回调
ClientConfiguration
类提供了配置客户端的最常见参数。
如果这还不够,用户可以使用 该方法添加回调函数。withClientConfigurer(ClientConfigurationCallback<?>)
提供如下回调:
低级 Elasticsearch 的配置:RestClient
此回调提供了一个可用于配置 Elasticsearch 的回调:org.elasticsearch.client.RestClientBuilder
RestClient
ClientConfiguration.builder()
.connectedTo("localhost:9200", "localhost:9291")
.withClientConfigurer(ElasticsearchClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
// configure the Elasticsearch RestClient
return restClientBuilder;
}))
.build();
低级 Elasticsearch 使用的 HttpAsyncClient 的配置:RestClient
此回调提供了一个用于配置 HttpCLient 的
由 .org.apache.http.impl.nio.client.HttpAsyncClientBuilder
RestClient
ClientConfiguration.builder()
.connectedTo("localhost:9200", "localhost:9291")
.withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
// configure the HttpAsyncClient
return httpAsyncClientBuilder;
}))
.build();
客户端日志记录
要查看实际发送到服务器和从服务器接收的内容/需要打开传输级别的日志记录,如下面的代码段中所述。
这可以通过在 Elasticsearch 客户端中通过将包的级别设置为 “trace” 来启用(参见 www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.htmlRequest
Response
tracer
)
<logger name="tracer" level="trace"/>