-
[Python3] ElasticSearch 사용하기언어/파이썬 & 장고 2019. 2. 17. 20:16
1. 기본 세팅
엘라스틱 서치 설치 : https://www.elastic.co/kr/downloads/elasticsearch
한글 형태소 분석기 노리 설치: https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-korean-language-analysis
파이썬3 엘라스틱서치 패키지 설치: https://elasticsearch-py.readthedocs.io/en/master/
2. 파이썬 Elastic Search 세팅
아래는 위에서 설치 받은 한글 형태소 분석기인 nori를 특정 필드에 적용도록 하는 세팅 방법 입니다.
from elasticsearch import Elasticsearch
# es 실행 기본포트: 9200, 기본 ip: 루프백 아이피 - 127.0.0.1 (localhost) es = Elasticsearch() # test-index 인덱스가 이미 사용하고 있을 시, 삭제 es.indices.delete(index='test-index', ignore=[400, 404])
body = { "settings": { "index": { "analysis": { "tokenizer": { "nori_tokenizer": { "type": "nori_tokenizer", }, }, "analyzer": { # nori 분석기 설정 "nori_korean": { "type": "custom", "tokenizer": "nori_tokenizer" }, } } } }, "mappings": { "goods": { "properties": { "name": { "type": "text", # name에 nori 형태소 분석기 설정 "analyzer": "nori_korean", }, "description": { "type": "text", }, "name_eng": { "type": "text" }, "pid": { "type": "integer" }, } } } }
es.indices.create(index='test-index', body=body)
# 테스트 데이터 goods = [ { "name": '주름원피스', "name_eng": "Pleated dress", "pid": 0, "description": '주름진 원피스' } ]
for i, data in enumerate(goods): res = es.index(index="test-index", doc_type='goods', body=data, id=i) print(res['result'])
3. 검색하기
query = { "query": { "bool": { "should": [ { "match": { "name": { "query": "주름", "boost": 3 } } } ] } } } res = es.search(index="test-index", body=query)