|
对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5! |
Elasticsearch 客户端
本章展示了支持的 Elasticsearch 客户端实现的配置和使用方法。
Spring Data Elasticsearch 运行在一个 Elasticsearch 客户端(由 Elasticsearch 客户端库提供)上,该客户端连接到单个 Elasticsearch 节点或集群。虽然 Elasticsearch 客户端可以直接用于与集群工作,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch作和 Elasticsearch 仓库的高级抽象。
命令式休息客户端
要使用命令式(非响应式)客户端,必须配置配置如下:
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()方法。
以下豆子随后可以注入其他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 | 一个实现弹性搜索作 |
| 2 | 这co.elastic.clients.elasticsearch.ElasticsearchClient那是被使用的。 |
| 3 | 低层级Rest客户端来自Elasticsearch库 |
| 4 | 这JsonpMapper用户通过Elasticsearch获得运输 |
基本上,应该直接使用弹性搜索作与Elasticsearch集互。使用仓库时,该实例也会在底层使用。
响应式休息客户端
在处理响应式栈时,配置必须从不同的类别中推导出来:
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 | 关于构建方法的详细描述,请参见客户端配置 |
这ReactiveElasticsearch配置类允许通过覆盖例如的进一步配置jsonpMapper()或transportOptions()方法。
以下豆子随后可以注入其他Spring成分中:
@Autowired
ReactiveElasticsearchOperations operations; (1)
@Autowired
ReactiveElasticsearchClient elasticsearchClient; (2)
@Autowired
RestClient restClient; (3)
@Autowired
JsonpMapper jsonpMapper; (4)
可以注入以下内容:
| 1 | 一个实现响应式弹性搜索作 |
| 2 | 这org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient该应用被使用。这是一个基于Elasticsearch客户端实现的响应式实现。 |
| 3 | 低层级Rest客户端来自Elasticsearch库 |
| 4 | 这JsonpMapper用户通过Elasticsearch获得运输 |
基本上,应该直接使用响应式弹性搜索作与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 | 配置创建客户端的功能(参见客户端配置回调)可以被多次添加。 |
| 如上例所示添加头部提供商,可以注入可能随时间变化的头部,比如认证JWTTokens。如果在响应式设置中使用此功能,提供商函数就不能阻塞! |
客户端配置回调
这ClientConfiguration类提供了最常见的参数来配置客户端。如果这些参数还不够,用户可以通过使用withClientConfigurer(ClientConfigurationCallback<?>)方法。
提供以下回调:
低层弹性搜索的配置Rest客户端:
该回调提供org.elasticsearch.client.RestClientBuilder可用于配置ElasticsearchRest客户端:
ClientConfiguration.builder()
.connectedTo("localhost:9200", "localhost:9291")
.withClientConfigurer(ElasticsearchClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
// configure the Elasticsearch RestClient
return restClientBuilder;
}))
.build();
低级 Elasticsearch 所用 HttpAsyncClient 的配置Rest客户端:
该回调提供org.apache.http.impl.nio.client.HttpAsyncClientBuilder配置 HttpCLient 的由Rest客户端.
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.html)
<logger name="tracer" level="trace"/>