最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1! |
最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1! |
本章介绍了受支持的 Elasticsearch 客户端实现的配置和用法。
Spring Data Elasticsearch 在连接到单个 Elasticsearch 节点或集群的 Elasticsearch 客户端(由 Elasticsearch 客户端库提供)上运行。 虽然 Elasticsearch 客户端可以直接用于处理集群,但使用 Spring Data Elasticsearch 的应用程序通常使用 Elasticsearch Operations 和 Elasticsearch 存储库的更高级别的抽象。
命令式休息客户端
要使用命令式(非反应式)客户机,必须按如下方式配置配置 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 | 有关生成器方法的详细说明,请参阅客户端配置 |
该类允许通过重写 or 方法进行进一步配置。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 | Elasticsearch 库中的低级别RestClient |
4 | 用户通过 ElasticsearchJsonpMapper Transport |
基本上,应该只使用 与 Elasticsearch 集群进行交互。
使用存储库时,此实例也在后台使用。ElasticsearchOperations
1 | 有关生成器方法的详细说明,请参阅客户端配置 |
1 | 实现ElasticsearchOperations |
2 | 使用的。co.elastic.clients.elasticsearch.ElasticsearchClient |
3 | Elasticsearch 库中的低级别RestClient |
4 | 用户通过 ElasticsearchJsonpMapper Transport |
反应式休息客户端
使用反应式堆栈时,配置必须派生自不同的类:
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 | 有关生成器方法的详细说明,请参阅客户端配置 |
该类允许通过重写 or 方法进行进一步配置。ReactiveElasticsearchConfiguration
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 库中的低级别RestClient |
4 | 用户通过 ElasticsearchJsonpMapper Transport |
基本上,应该只使用 与 Elasticsearch 集群进行交互。
使用存储库时,此实例也在后台使用。ReactiveElasticsearchOperations
1 | 有关生成器方法的详细说明,请参阅客户端配置 |
1 | 实现ReactiveElasticsearchOperations |
2 | 使用的。
这是一个基于 Elasticsearch 客户端实现的响应式实现。org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient |
3 | Elasticsearch 库中的低级别RestClient |
4 | 用户通过 ElasticsearchJsonpMapper Transport |
客户端配置
客户端行为可以通过以下方式更改 允许设置 SSL、连接和套接字超时、标头和其他参数的选项。ClientConfiguration
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)
ElasticsearchClientConfigurationCallback.from(clientBuilder -> {
// ...
return clientBuilder;
}))
. // ... other options
.build();
1 | 定义默认标头(如果需要自定义) |
2 | 使用构建器提供集群地址、设置默认值或启用 SSL。HttpHeaders |
3 | (可选)启用 SSL。此函数存在重载,可以采用或替代证书的指纹,因为它由 Elasticsearch 8 在启动时输出。SSLContext |
4 | (可选)设置代理。 |
5 | (可选)设置路径前缀,主要用于不同的集群在某个反向代理后面。 |
6 | 设置连接超时。 |
7 | 设置套接字超时。 |
8 | (可选)设置标头。 |
9 | 添加基本身份验证。 |
10 | 可以指定一个函数,每次在向 Elasticsearch 发送请求之前都会调用该函数 - 例如,此处将当前时间写入标头中。Supplier<HttpHeaders> |
11 | 可以多次添加配置已创建客户端的函数(参见客户端配置回调)。 |
如上例所示,添加标头供应商允许注入可能随时间变化的标头,例如身份验证 JWT 令牌。 如果在反应式设置中使用此功能,则供应商功能不得阻塞! |
客户端配置回调
该类提供用于配置客户端的最常见参数。
如果这还不够,用户可以使用该方法添加回调函数。ClientConfiguration
withClientConfigurer(ClientConfigurationCallback<?>)
提供以下回调:
低级 Elasticsearch 的配置:RestClient
此回调提供了一个可用于配置 Elasticsearch 的回调:org.elasticsearch.client.RestClientBuilder
RestClient
ClientConfiguration.builder()
.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()
.withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
// configure the HttpAsyncClient
return httpAsyncClientBuilder;
}))
.build();
1 | 定义默认标头(如果需要自定义) |
2 | 使用构建器提供集群地址、设置默认值或启用 SSL。HttpHeaders |
3 | (可选)启用 SSL。此函数存在重载,可以采用或替代证书的指纹,因为它由 Elasticsearch 8 在启动时输出。SSLContext |
4 | (可选)设置代理。 |
5 | (可选)设置路径前缀,主要用于不同的集群在某个反向代理后面。 |
6 | 设置连接超时。 |
7 | 设置套接字超时。 |
8 | (可选)设置标头。 |
9 | 添加基本身份验证。 |
10 | 可以指定一个函数,每次在向 Elasticsearch 发送请求之前都会调用该函数 - 例如,此处将当前时间写入标头中。Supplier<HttpHeaders> |
11 | 可以多次添加配置已创建客户端的函数(参见客户端配置回调)。 |
如上例所示,添加标头供应商允许注入可能随时间变化的标头,例如身份验证 JWT 令牌。 如果在反应式设置中使用此功能,则供应商功能不得阻塞! |
客户端日志记录
要查看实际发送到服务器和从服务器接收的内容/需要打开传输级别的日志记录,如下面的代码片段所述。
这可以通过在 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"/>