前提・実現したいこと
Docker上でElasticSearchを組み込んでpythonでindex作成・Search等しようとしています。
Elasticsearch起動後、pythonでアクセス試みたら以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
{"status": "faild", "message": "ConnectionError(<urllib3.connection.HTTPConnection object at 0x7f8524dbbfd0>: Failed to establish a new connection: [Errno 111] Connection refused) caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f8524dbbfd0>: Failed to establish a new connection: [Errno 111] Connection refused)", "command": {"type": "search", "args": []}, "error": "ConnectionError", "traceback": [" File "./app/main.py", line 11, in run\n res = run_command(payload)\n", " File "/usr/src/app/app/command_runner.py", line 36, in run_command\n command = import_module('.' + command_path, 'app')\n", " File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n", " File "<frozen importlib._bootstrap>", line 994, in _gcd_import\n", " File "<frozen importlib._bootstrap>", line 971, in _find_and_load\n", " File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked\n", " File "<frozen importlib._bootstrap>", line 665, in _load_unlocked\n", " File "<frozen importlib._bootstrap_external>", line 678, in exec_module\n", " File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed\n",
該当のソースコード
docker-compose.yml
version: "3" services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1 container_name: es01 environment: - node.name=es01 - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS: -Xms750m -Xmx750m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - "9200:9200" networks: - esnet volumes: esdata01: driver: local networks: esnet:
search.py
from elasticsearch import Elasticsearch def search(word): #es = Elasticsearch() #ok #es = Elasticsearch([{'host': 'localhost', 'port': '9200'}]) #ok #es = Elasticsearch([{'host': '127.0.0.1', 'port': '9200'}]) #ok es = Elasticsearch([{'host': 'es01', 'port': '9200'}]) #NG res = es.search(index="test_index", body={"query": {"multi_match": {"fields": [ "result.name", "result.alphabeticalName"],"query": word}}}) print(res) if len(sys.argv) > 1: word = sys.argv[1] search(word) else: print("plz input keyword")
試したこと
Dockerの外で上記search.pyを実行すると、下記3行の書き方では求める結果が得られます。
es = Elasticsearch()
es = Elasticsearch([{'host': 'localhost', 'port': '9200'}])
es = Elasticsearch([{'host': '127.0.0.1', 'port': '9200'}])
ただ、下記の記述では上述のエラーが返ってきます。
es = Elasticsearch([{'host': 'es01', 'port': '9200'}]) #NG
本来の目的で言うと、Docker内に配置したpythonを下記コマンドのように動かしたいのですが、
docker-compose run test ./bin/test search keyword
この書き方をするとlocalhost:9200ではアクセスできず、
参考サイトをみる限りhostnameにアクセスすべき、とあるので
試行錯誤しておりますが未だエラー解決できておりません。
参考)
https://github.com/elastic/elasticsearch-py/issues/715
一週間1mmも進んでいなくてもはや吐きそうになってきました…
どなたか救いの手をどうぞよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
cf)http://localhost:9200/にブラウザでアクセスすると以下表示されます。
{
"name" : "es01",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "cxGKY5DvS26sQTbQ5FN_3A",
"version" : {
"number" : "7.1.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "7a013de",
"build_date" : "2019-05-23T14:04:00.380842Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 08:51