Elasticsearch Rest Client with Spring Data Elasticsearch

我处于使用 Spring Boot 和 AWS elasticsearch service 的情况。AWS Elasticsearch Service,仅提供 REST 接口。

Elasticsearch Rest Client就在这里

简单地说,是否可以将REST客户端与Spring Data Elasticsearch一起使用?

换句话说,Spring Data Elasticsearch是否与Elasticsearch Rest客户端一起使用?

Spring Data Elasticsearch非常易于使用,模板提供了我需要的大多数功能。使用Elasicsearch Rest客户端,我必须自己实现所有功能。


答案 1

[2020年5月更新]

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

正如你所读到的,Spring Data Elasticsearch 4.0:

Spring Data Elasticsearch现在特别使用Elasticsearch 7,7.6.2。不再支持在 6.x 版本上运行的 Elasticsearch 集群。ElasticsearchTemplate 类被弃用,因为它使用 TransportClient 访问 Elasticsearch,由于 Elasticsearch 版本 7.+ 用户应切换到 ElasticsearchRestTemplate 或 ReactiveElasticsearchTemplate,因此 ElasticsearchTemplate 本身已被弃用。

[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);

[原始答案]

目前,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

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

希望它有帮助。


答案 2

我认为弹性搜索的jest客户端将满足您的目的。https://github.com/searchbox-io/Jest/tree/master/jest。Jest是ElasticSearch的Java HTTP Rest客户端。它也有一个非常好的文档,并支持弹性搜索中的所有查询。


推荐