web-dev-qa-db-fra.com

Elasticsearch Rest Client avec Spring Data Elasticsearch

J'utilise le service Spring Boot et le service AWS elasticsearch. Service AWS Elasticsearch qui fournit uniquement l'interface REST.

Elasticsearch Rest Client est ici .

Simplement, est-il possible d'utiliser le client REST avec Spring Data Elasticsearch?

En d'autres termes, Spring Data Elasticsearch fonctionne-t-il avec le client Elasticsearch Rest?

Spring Data Elasticsearch est très facile à utiliser et le modèle fournit la plupart des fonctionnalités dont j'ai besoin. Avec le client Elasicsearch Rest, je dois implémenter moi-même toutes les fonctionnalités.

10
abcdef12

[Mise à jour 2019]

Voir maintenant que 3.2.0 M1 Spring Data Elasticsearch prend en charge le client HTTP ( https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.M1/reference/html/#reference )

Selon la documentation (cela pourrait bien sûr changer car il ne s'agit pas de la version finale, je vais donc le mettre ici):

Le bien connu TransportClient est obsolète à partir de Elasticsearch 7.0.0 et devrait être supprimé dans Elasticsearch 8.0.

2.1. Client de haut niveau REST

Le client Java REST de haut niveau fournit un remplacement direct pour TransportClient car il accepte et renvoie les mêmes objets de requête/réponse et dépend donc du projet principal Elasticsearch. Les appels asynchrones sont opérés sur un pool de threads gérés par le client et nécessitent un rappel pour être avertis lorsque la demande est effectuée.

Exemple 49. Client de niveau supérieur 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);

[Réponse originale]

Actuellement, Spring Data Elasticsearch ne prend pas en charge la communication de l’API REST. Ils utilisent le client de transport.

Il existe un fork distinct de Spring Data Elasticsearch (le gars en avait besoin pour AWS de la même façon que vous), où la bibliothèque JEST est utilisée et la communication établie par REST:

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

Vous trouverez la discussion intéressante sous la coche suivante de Spring Data Elasticsearch:

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

Je pense que Spring Data Elasticseach devra migrer vers REST à l'avenir, selon les déclarations de l'équipe Elasticsearch selon lesquelles elles prévoient de prendre en charge uniquement la communication HTTP pour ES.

J'espère que ça aide.

15
Przemek Nowak

Je pense que le client de plaisanterie pour elasticsearch servira votre but. https://github.com/searchbox-io/Jest/tree/master/jest . Jest est un client Java HTTP Rest pour ElasticSearch. Il a aussi une très bonne documentation et supporte toutes les requêtes dans elasticsearch.

1
beSimple