2016-11-30 8 views
0

elasticというRパッケージを使用してAWS ElasticSearch Service(AWS ES)にクエリを実行しようとしています。サーバーに接続しようとするとエラーが発生します。両方のサーバにpingを実行する、または実際に文書を検索しようとしているかどうかR - Getting 404エラーを使用したAWS Elasticsearchサービスへの接続

install.packages("elastic") 
library(elastic) 
aws_endpoint = "<secret>" 
    # I am certain the endpoint exists and is correct, as it functions with Kibana 
aws_port = 80  
    # I have tried 9200, 9300, and 443 with no success 

connect(es_host = aws_endpoint, 
    es_port = 80, 
    errors = "complete") 
ping() 
Search(index = "foobar", size = 1)$hits$hits 

このエラーを取得:ここ

は一例です

Error: 404 - no such index 
ES stack trace: 
    type: index_not_found_exception 
    reason: no such index 
    resource.type: index_or_alias 
    resource.id: us-east-1.es.amazonaws.com 
    index: us-east-1.es.amazonaws.com 

私はAWS ESのダッシュボードに行っていると存在するインデックスを使用していることを確認しました。なぜこのエラー?

私は、トランスポートプロトコルについて何か誤解していると思います。 elasticはelasticsearchのHTTP APIとやりとりします。私はこれが大丈夫だと思った。

RとAWS ES間の適切な接続を確立するにはどうすればよいですか?

R version 3.3.0 (2016-05-03); elastic_0.7.8

+0

AWSのバージョンが(参照http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)に署名するすべての要求が必要です。私はropensci/elasticパッケージがこの署名体系をサポートしているという明白な言及を見ていません。私は現時点でこれを行うCRANパッケージは認識していません。 –

+0

ありがとう@ DavidF.Severski。私はこれを調べます。 – zephel

+0

実際には、私たちのサーバー管理者はまだESのURLをまだ確保していないと言います。署名する必要はありません。他の考え? @ DavidF.Severski – zephel

答えて

2

解決しました。

es_pathは、空の文字列(""として指定する必要があります。そうでない場合、connect()はAWS領域(つまりus-east-1.es.amazonaws.com)をパスとして認識します。私はconnect()が、HTTPリクエストに誤解されたパス、following the format shown hereを追加すると思います。

connect(es_host = aws_endpoint, 
    es_port = 80, 
    errors = "complete", 
    es_path = "" 
) 

実際に使用したパラメータは次のとおりですが、違いはありません。 固定es_pathは、キーです。ホストされたElasticsearchの

connect(es_host = aws_endpoint, 
    es_port = 443, 
    es_path = "", 
    es_transport_schema = "https") 
+0

aws_endpointの外観の例を教えてください。私は自分自身を見つけるのに苦労しています。前もって感謝します! – Dzidas

関連する問題