使用Spring Data Elasticsearch的Elasticsearch Rest客户端

19
我现在的情况是使用Spring Boot和AWS Elasticsearch服务。AWS Elasticsearch服务只提供REST接口。
Elasticsearch Rest Client在这里
简单来说,是否可以在Spring Data Elasticsearch中使用REST客户端?
换句话说,Spring Data Elasticsearch是否与Elasticsearch Rest客户端兼容?
Spring Data Elasticsearch非常易于使用,模板提供了我需要的大部分功能。但是,使用Elasticsearch Rest客户端,我必须自己实现所有功能。

Elastic Search已发布了高级REST客户端,可以很好地动态构建查询 :) - abcdef12
3个回答

26

[2020年5月更新]

https://spring.io/blog/2020/05/27/what-s-new-in-spring-data-elasticsearch-4-0

从Spring Data Elasticsearch 4.0开始,现在使用的是Elasticsearch 7,特别是7.6.2。不再支持运行在6.x版本上的Elasticsearch集群。由于它使用TransportClient访问Elasticsearch,而TransportClient自身已经被弃用,因此ElasticsearchTemplate类也已被弃用。用户应该转换为ElasticsearchRestTemplate或ReactiveElasticsearchTemplate。

[2019年2月更新]

现在可以看到3.2.0 M1 Spring Data Elasticsearch支持HTTP客户端 (https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.M1/reference/html/#reference)

根据文档(当然可能会发生变化,因为它不是最终版本,所以我将把它放在这里):

 

众所周知,TransportClient在Elasticsearch 7.0.0中已被弃用,并预计在Elasticsearch 8.0中将被删除。

    

2.1 高级REST客户端

    

Java高级REST客户端为TransportClient提供了一个直接的替代方案,因为它接受并返回完全相同的请求/响应对象,因此依赖于Elasticsearch核心项目。异步调用在客户端管理的线程池上操作,并需要回调来在请求完成时得到通知。

例49 高级REST客户端

static class Config {

  @Bean
  RestHighLevelClient client() {

    ClientConfiguration clientConfiguration = ClientConfiguration.builder() 
      .connectedTo("localhost:9200", "localhost:9201")
      .build();

    return RestClients.create(clientConfiguration).rest(); 
  }
}

// ...

IndexRequest request = new IndexRequest("spring-data", "elasticsearch", randomID())
  .source(singletonMap("feature", "high-level-rest-client"))
  .setRefreshPolicy(IMMEDIATE);

IndexResponse response = client.index(request);

[Translated answer]

目前的 Spring Data Elasticsearch 不支持使用 REST API 进行通信,而是使用传输客户端。

有一个独立的 Spring Data Elasticsearch 分支(这位开发者需要它来支持 AWS,就像您一样),其中使用了 JEST 库,并通过 REST 进行通信:

https://github.com/VanRoy/spring-data-jest

在 Spring Data Elasticsearch 的以下工单中,您将找到有趣的讨论:

https://jira.spring.io/browse/DATAES-220

根据 Elasticsearch 团队的声明,他们计划仅支持 HTTP 通信,因此我认为 Spring Data Elasticsearch 在未来将需要迁移到 REST。

希望对您有所帮助。


有什么新消息吗?Spring Data Elasticsearch在最新版本中支持REST API吗? - grep
如何在Spring Data ES 3.2.0.M1中使用High Level Rest Client?请参阅我的问题https://dev59.com/tbHma4cB1Zd3GeqPTPHN。 - Fedor

1

0

无法对Przemek Nowak上面的答案发表评论。如果您不想等待Spring Data ES 2.2.x使用高级REST客户端,那么Spring Data Jest可以解决问题。

根据他们的文档,您首先需要禁用默认的Spring Data ES自动配置:

@SpringBootApplication(exclude = {
    ElasticsearchAutoConfiguration.class, 
    ElasticsearchDataAutoConfiguration.class
})

就是这样 - 存储库现在将使用 Jest 的实现。 如果您想使用 ElasticsearchTemplate,请确保注入ElasticsearchOperations接口:

private final ElasticsearchOperations esTemplate;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接