실행하기
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 [프로세스 번호]
# 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 하면 끝
# 검색 결과는 점수가 높은 순으로 정렬되어 반환된다