Docker와 Python을 활용한 Elasticsearch 사용법

yoonene·2022년 8월 27일
0

Elasticsearch

목록 보기
2/14

1. Docker 실행

실행하기

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.4

docker images

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" d64bccab426c

중단하기
프로세스 확인
docker ps
특정 프로세스 중단
docker stop [프로세스 번호]

2. python 코드 (ipynb)


# In [1]
from elasticsearch import Elasticsearch
from datasets import load_from_disk

# In[2]
# Elasticsearch 연결하기  ->  설정한 포트 입력
es = Elasticsearch('<http://localhost:30001>')

# In[3]
!curl -XGET localhost:30001
# 다음과 같이 나타나면, 현재 Elasticsearch 가 잘 동작하고 있는 것
# {
#    "name" : "iCfG3OW",
#    "cluster_name" : "elasticsearch",
#    "cluster_uuid" : "ne-ovptgRn-Gbd331afwZw",
#    "version" : {
#      "number" : "5.4.3",
#      "build_hash" : "eed30a8",
#      "build_date" : "2017-06-22T00:34:03.743Z",
#      "build_snapshot" : false,
#      "lucene_version" : "6.5.1"
#    },
#    "tagline" : "You Know, for Search"
#  }

# In[4]
# Elasticsearch 는 데이터를 저장하기 전에 Index 라는 것을 생성해야 한다.
# 해당 Index 에 데이터를 저장할 수 있다.
INDEX = 'latex'
if not es.indices.exist(INDEX):
		ex.indices.create(index=INDEX)

# In[5]
# 생성한 index 는 다음 방식으로 확인할 수 있다.
!curl -XGET localhost:30001/_cat/indices?v
# 지우는 법은 아래와 같다.
# es.indices.delete(index=INDEX)

# In[6]
# 데이터 입력하기
# 다음의 구조를 따라야 하며, Key 값, doc_type 은 원하는 대로 작성하면 된다.
for idx, latex in enumerate(contents):
    body = {'latex': latex}
    ex.index(index=INDEX, doc_type='news', id=idx+1, body=body)

# In[7]
# 잘 저장되었는지 확인
es.get(index=INDEX, id=검색하려는_id_값)
# 특정 데이터를 삭제하는 법
# es.delete(index=INDEX, id=삭제하려는_id_값)

# In[8]
# 검색
# Query 만드는 방식이 다양하다.
# 'match' 방식을 통해 완전 일치는 아니지만, 최대한 유사한 것을 찾는다.
# 형태를 지켜야 하며, 'text' 라는 Key 는 데이터를 저장할 때 사용했던 Key 다.
body = {
		'query': {
				'match': {
						'latex': '{//sqrt(3)}'
				}
		}
}
res = es.search(index=INDEX, body=body)

# 실제로 적용할 때는, Test Dataset 의 question 들을 가져와서 search 하면 끝
# 검색 결과는 점수가 높은 순으로 정렬되어 반환된다
profile
NLP Researcher / Information Retrieval / Search

0개의 댓글