Клиент Elasticearch Rest с Spring Data Elasticsearch

Я в ситуации, когда я использую Spring загрузку и сервис AWS elasticsearch. AWS Elasticsearch, который предоставляет только интерфейс REST.

Клиент Elasticearch Rest < здесь.

Просто, возможно ли использовать клиент REST с Spring Data Elasticsearch?

Другими словами, работает ли Spring Data Elasticsearch с клиентом Elasticearch Rest?

Spring Data Elasticsearch очень прост в использовании, и шаблон предоставляет очень большую функциональность, которая мне нужна. С клиентом Elasicsearch Rest я должен реализовать все функции самостоятельно.

Ответ 1

[Обновление за февраль 2019 года]

Теперь мы видим, что 3.2.0 M1 Spring Data Elasticsearch поддерживает HTTP-клиент (https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.M1/reference/html/#reference).

Согласно документации (она, конечно, может измениться, потому что это не окончательная версия, поэтому я опубликую ее здесь):

Начиная с Elasticsearch 7.0.0, хорошо известный TransportClient устарел и, как ожидается, будет удален в Elasticsearch 8.0.

2.1. Клиент REST высокого уровня

Клиент REST Java высокого уровня обеспечивает прямую замену для 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 о том, что они планируют поддерживать только HTTP-связь для ES.

Надеюсь, поможет.

Ответ 2

Я думаю, что клиент-шутник для elasticsearch будет служить вашей цели. https://github.com/searchbox-io/Jest/tree/master/jest. Jest - это клиент HTTP HTTP Rest для ElasticSearch. Он также имеет очень хорошую документацию и поддерживает все запросы в elasticsearch.

Ответ 3

Не могу прокомментировать ответ Przemek Nowak выше. Если вы не хотите ждать, пока Spring Data ES 2.2.x будет использовать High Level Rest Client, тогда Spring Data Jest спасет вас.

Согласно их документации, вы сначала отключите автоконфигурацию Spring Data ES по умолчанию:

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

И что это - репозитории теперь будут использовать реализацию Jest. И если вы хотите использовать ElasticsearchTemplate, убедитесь, что вы ElasticsearchOperations интерфейс ElasticsearchOperations:

private final ElasticsearchOperations esTemplate;