web-dev-qa-db-fra.com

Comment se connecter à AWS Elasticsearch?

J'essaie de me connecter à AWS Elasticsearch mais j'obtiens toujours l'erreur suivante:

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.Java:278)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.Java:197)
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.Java:106)
at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.Java:98)
at org.elasticsearch.client.transport.TransportClient.index(TransportClient.Java:334)
at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.Java:313)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:65)
at com.c_backendcrawler.utility.ElasticSearch.uploadObject(ElasticSearch.Java:25)
at com.c_backendcrawler.Start.main(Start.Java:34)

Mon code suit:

 //Create Client
    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "zencubes-search").put("node.name","Darkhawk").build();
    TransportClient transportClient = new TransportClient(settings);
    transportClient.addTransportAddress(new InetSocketTransportAddress(
            "x.x.x.x",9300));
    return transportClient;

Sortie d'AWS Elasticsearch:

    {
status: 200,
name: "Darkhawk",
cluster_name: "817880037706:zencubes-search",
version: {
number: "1.5.2",
build_hash: "62ff9868b4c8a0c45860bebb259e21980778ab1c",
build_timestamp: "2015-04-27T09:21:06Z",
build_snapshot: false,
lucene_version: "4.10.4"
},
tagline: "You Know, for Search"
}

J'ai essayé de boucler ( https://search-zencubes-search-xxxxxxxx.eu-west-1.es.amazonaws.com/ ) et cela fonctionne - mais pas sur le port 9300. Que suis-je faire mal ici?

11
Fabian Lurz

Le protocole de transport natif n'est pas pris en charge à l'aide d'AWS Managed ElasticSearch et n'est disponible que sur le point de terminaison REST. Envisagez de changer votre client pour consommer le point de terminaison REST, tel que https://github.com/searchbox-io/Jest .

Source: https://forums.aws.Amazon.com/thread.jspa?messageID=681938

16
John Russell

Depuis Elasticsearch Java SDK version 5.6 il y a un REST Client disponible. Cela vous permet de vous connecter à Elasticsearch Service sur AWS.

Actuellement, Elasticsearch Service autorise les installations jusqu'à la version 5.5, mais vous pouvez utiliser le SDK 5.6 Java contre un cluster 5.5 avec des limitations mineures).

Remarque : lors de l'initialisation du RestClient, vous devez utiliser le port 80 ou 443 respectivement au lieu de 9200. Par exemple.

RestClient restClient = RestClient.builder(
    new HttpHost("search-test-elasti-xxxx-xxxxx.us-east-1.es.amazonaws.com", 80, "http")).build();
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClient); 
// [...]
5
H6.

Comme John Russell l'a dit ci-dessus, vous devez utiliser un client REST pour communiquer avec votre cluster AWS Elastic.

Elastic a récemment publié la première version RC de son propre Java REST, c'est donc une option maintenant aussi).

Documents client: https://www.elastic.co/guide/en/elasticsearch/client/Java-rest/current/index.html

Maven Repo: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.elasticsearch.client%22%20AND%20a%3A%22rest%22

2
Ivan Krumov