我在使用 elasticsearch-aws 后端的 Spring Boot 2.7 项目中使用 Hibernate Search 6.2。效果很好。
现在我正在集成 elasticsearch-evolution 以进行架构迁移。为了在 elasticsearch-evolution 中重用 Hibernate Search 的 AWS 签名机制,我尝试将
AwsSigningRequestInterceptor
挂接到 RestClientBuilder 的 setHttpClientConfigCallback
中(如其自述文件中所述)。
由于
AwsSigningRequestInterceptor
不公开,我正在尝试利用 ElasticsearchAwsHttpClientConfigurer
。您是否有一些关于如何在 Spring 上下文中访问所需的 BeanResolver
和 ConfigurationPropertySource
的提示?正常注射是不行的。
解决方案:感谢@yrodiere,以下代码有效:
@Autowired
SessionFactory sessionFactory;
@Bean
public RestClient restClient() {
SearchMapping mapping = Search.mapping(sessionFactory);
Backend backend = mapping.backend();
ElasticsearchBackend elasticsearchBackend =
backend.unwrap(ElasticsearchBackend.class);
return elasticsearchBackend.client(RestClient.class);
}
Hibernate Search 通过其自己的内部注册表(而不是通过 Spring DI)解析此特定 bean。我想你可以打电话给
new ElasticsearchAwsHttpClientConfigurer()
。
尽管说实话,您在这里处理的是内部代码,它可以(并且将会)随时更改其公开的构造函数/方法,因此这不是一个面向未来的策略。
我认为你最好的选择是检索 Hibernate Search 的 Elasticsearch 客户端并以某种方式让
elasticsearch-evolution
使用它。
如果不可能,您最好的解决方案可能是将相关代码复制粘贴到您的项目中,前提是您的项目的许可证与 Hibernate Search 自己的 LGPL 许可证兼容。否则,您可以使用改编的代码发布您自己的 LGPL 项目。