如何将多个弹性搜索连接添加到 Spring 引导项目?
How to add multiple elastic search connections to a Spring Boot project?
我有 2 个弹性搜索服务器,我需要将连接添加到 spring 引导项目。对于一个连接,以下是我的代码,
@Configuration
@EnableElasticsearchRepositories(basePackages = {"packageName"})
public class ES {
@Bean
public RestHighLevelClient client() {
CredentialsProvider cp = new BasicCredentialsProvider();
cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password"));
return new RestHighLevelClient(RestClient.builder(new HttpHost("host", "port", "https"))
.setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(cp)
.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy())));
}
}
那么如何添加其他服务器连接呢?如果我复制此 class 并添加其他服务器连接详细信息,它会起作用吗?而且我还需要分开索引。我的意思是,例如我需要索引 entity1
必须仅在 server 1
中,索引 entity2
必须仅在 server 2
中。那可能吗?如果有人能帮助我,我将不胜感激。
如果两台服务器属于同一个 ES 集群,RestClient.builder
接受要连接的 HttpHost 数组。客户端(底层是 ES 低级 REST 客户端)将对这些主机进行循环请求。
目前 Spring Data Elasticsearch 无法做到这一点。存储库使用 Spring 上下文提供的 ElasticsearchOperations
bean,而此 bean 使用配置的 RestHighLevelClient
。无法配置到不同集群的多个连接。
编辑:
您可以使用 beans 将一个连接配置为默认连接,然后您可以使用此注入作为 ElasticsearchOperations
并由存储库方法使用。
对于第二个连接,您需要像您已经做的那样创建一个新的 RestHighLevelClient
,然后创建一个额外的 ElasticsearchRestTemplate
传递给第二个客户端;使用注入的 ElasticsearchConverter
作为第二个构造函数参数。您可以在 org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration
中查看代码是如何完成的。
使用第二个 ElasticsearchOperations
实例,您可以针对第二个集群进行操作,但您必须使用此接口的方法,而不能为此使用存储库方法。
我有 2 个弹性搜索服务器,我需要将连接添加到 spring 引导项目。对于一个连接,以下是我的代码,
@Configuration
@EnableElasticsearchRepositories(basePackages = {"packageName"})
public class ES {
@Bean
public RestHighLevelClient client() {
CredentialsProvider cp = new BasicCredentialsProvider();
cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password"));
return new RestHighLevelClient(RestClient.builder(new HttpHost("host", "port", "https"))
.setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(cp)
.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy())));
}
}
那么如何添加其他服务器连接呢?如果我复制此 class 并添加其他服务器连接详细信息,它会起作用吗?而且我还需要分开索引。我的意思是,例如我需要索引 entity1
必须仅在 server 1
中,索引 entity2
必须仅在 server 2
中。那可能吗?如果有人能帮助我,我将不胜感激。
如果两台服务器属于同一个 ES 集群,RestClient.builder
接受要连接的 HttpHost 数组。客户端(底层是 ES 低级 REST 客户端)将对这些主机进行循环请求。
目前 Spring Data Elasticsearch 无法做到这一点。存储库使用 Spring 上下文提供的 ElasticsearchOperations
bean,而此 bean 使用配置的 RestHighLevelClient
。无法配置到不同集群的多个连接。
编辑:
您可以使用 beans 将一个连接配置为默认连接,然后您可以使用此注入作为 ElasticsearchOperations
并由存储库方法使用。
对于第二个连接,您需要像您已经做的那样创建一个新的 RestHighLevelClient
,然后创建一个额外的 ElasticsearchRestTemplate
传递给第二个客户端;使用注入的 ElasticsearchConverter
作为第二个构造函数参数。您可以在 org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration
中查看代码是如何完成的。
使用第二个 ElasticsearchOperations
实例,您可以针对第二个集群进行操作,但您必须使用此接口的方法,而不能为此使用存储库方法。