본문으로 바로가기
728x90

소개

 

파이썬을 엘라스틱서치와 연동하는 방법에 대해 알아보려고 하는데요.

 

우선 원격 설정과 간단한 테스트까지 해보도록 하겠습니다.

 

 

서비스 시작

 

서비스를 시작합니다.

sudo systemctl start elasticsearch

 

각각 서비스 확인, 서비스 포트 확인 명령어입니다.

sudo systemctl status elasticsearch

netstat -antp

curl -X GET localhost:9200

 

curl 명령어를 이용해도 CRUD 를 할 수 있습니다.

해당 Elasticsearch 버전은 7.8 이네요.

curl -X GET localhost:9200
{
  "name" : "dev",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "VwEer7NWSEefMi9XeBpEFQ",
  "version" : {
    "number" : "7.8.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date" : "2020-06-14T19:35:50.234439Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 

 

원격 테스트

 

원격으로 테스트하는데 다음과 같이 에러가 발생합니다.

from elasticsearch import Elasticsearch

def create_index(index):
    if not es.indices.exists(index=index):
        return es.indices.create(index=index)
    
if __name__ == '__main__':
    url = '192.168.111.176'
    port = '9200'
    es = Elasticsearch(f'{url}:{port}')
    print(es)
    r = create_index(index)
    print(r)
elasticsearch.exceptions.ConnectionError: ConnectionError((<urllib3.connection.HTTPConnection object at 0x000002413D20C080>, 'Connection to 192.168.111.175 timed out. (connect timeout=10)')) caused by: ConnectTimeoutError((<urllib3.connection.HTTPConnection object at 0x000002413D20C080>, 'Connection to 192.168.111.175 timed out. (connect timeout=10)'))

 

 

서비스 포트를 확인해봅니다.

 

127.0.0.1:9200 으로 열려있는데요.

내부 아이피로 바인딩되어 있으면 내부에서만 접속할 수 있습니다.

외부에서도 접속할 수 있도록 환경파일을 설정해야합니다.

 

 

 

해당 파일을 열어서 다음과 같이 수정합니다.

 

/etc/elasticsearch/elasticsearch.yml

 

 

서비스를 재시작하고 서비스 포트를 확인해보면 127.0.0.1:9200 -> :::9200 로 바뀌었습니다.

 

 

 

다시 예제 코드를 실행해봅니다.

정상적으로 작동하네요.

....

es = Elasticsearch(f'{url}:{port}')
print(es)
r = create_index(index)
print(r)
<Elasticsearch([{'host': '192.168.111.176', 'port': 9200}])>
{'acknowledged': True, 'shards_acknowledged': True, 'index': 'news'}