Elasticsearch 설정하기
드디어!! AWS 에 있는 Elasticsearch 서비스에 은전한닢 플러그인이 추가 됐습니다. 예전에는 이런 기능이 없어서 제가 따로 elasko 라고 은전한닢에 패치된 형태의 엘라스틱서치의 도커 형태를 만들었습니다. 이제 시간이 지나서 elasticsearch 6.0 이 나오고 (제가 만든 elasko 는 5.5 기반) 문법도 많이 바뀌고 해서 다시금 정리할 필요가 있습니다.
Elasticsearch 편하게 쓰는걸 원하신다면
- AWS 에 있는 서비스 추천입니다.
- 기업 서비스용이라면 100% 추천입니다.
- kibana 까지 이용하실려면 vpc 가 아닌 ip 기반으로 관리를 선택하세요
그러나 가난한 개인 개발자라면 한달에 EC2 가격만 해도 부담이 되겠지요. 이 글은 가난한 개발자들 위주로 진행하겠습니다. EC2 한대만 허용되어 있다면 docker 에 elasticsearch 를 이용해서 적용하는것이 가성비가 훌륭한 선택입니다.
- Elasticsearch 6.1.1 설치하기
$ docker run -dit --name elastic -p 9200:9200 -p 9300:9300 \ docker.elastic.co/elasticsearch/elasticsearch:6.1.1
편하게 elasticsearch 가 설치됩니다.
- elastic 컨테이너에 접속하기
$ docker exec -it elastic /bin/bash
접속해서 root console이 뜹니다.
- zip 설치하기
필요한 것만 설치되어 있는 docker 컨테이너 특성상 zip 이 없습니다.
# yum install zip
마지막에 물어보는 대답에 'y' 하시면 됩니다.
- 은전한닢 패치하기
$ bash <(curl -s \ https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/scripts/downloader.sh)\ -e 6.1.1 -p 6.1.1.1
엘라스틱서치 6.1.1 버젼에 플러그인 대상 6.1.1.1 버젼을 설치한다는 것입니다.
$ ./bin/elasticsearch-plugin install \ file://`pwd`/elasticsearch-analysis-seunjeon-6.1.1.0.zip
- Elasticsearch 재시작
꼭 해야 하는지는 모르겠지만 한번쯤 해주는 것도 나쁘지 않아 보입니다.
$ ps -ef | grep elasticsearch
로 찾은 process 번호를
$ kill -SIGTERM [process id]
로 죽이면. 컨테이너 밖으로 튕겨 나가게 됩니다.
$ docker start elastic
밖에서 이 명령으로 다시 띄우시고
- 테스트 하기
제대로 패치된게 맞는지 확인합니다. 기존 은전한닢 사이트에서 제공하는 확인 스크립트를 새버젼 (6.1.1)에 맞게 바꾸어 줍니다.
#!/usr/bin/env bash ES='http://localhost:9200' ESIDX='seunjeon-idx' curl -XDELETE "${ES}/${ESIDX}?pretty" sleep 1 curl -XPUT "${ES}/${ESIDX}/?pretty" \-H 'Content-Type: application/json' -d '{ "settings" : { "index":{ "analysis":{ "analyzer":{ "korean":{ "type":"custom", "tokenizer":"seunjeon_default_tokenizer" } }, "tokenizer": { "seunjeon_default_tokenizer": { "type": "seunjeon_tokenizer", "index_eojeol": false, "user_words": ["낄끼+빠빠,-100", "c\\+\\+", "어그로", "버카충", "abc마트"] } } } } } }' sleep 1 echo "# 삼성/N 전자/N" curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d ' { "analyzer": "korean", "text": "삼성전자" } ' echo "# 빠르/V 지/V" curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d ' { "analyzer": "korean", "text": "빨라짐" } ' echo "# 슬프/V" curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d ' { "analyzer": "korean", "text": "슬픈" } ' echo "# 새롭/V 사전/N 생성/N" curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d ' { "analyzer": "korean", "text": "새로운사전생성" } ' echo "# 낄끼/N 빠빠/N c++/N" curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d ' { "analyzer": "korean", "text": "낄끼빠빠 c++" } '