[Elasticsearch] 엘라스틱 서치 6.1.1 한글패치 적용하기

Elasticsearch 설정하기

드디어!! AWS 에 있는 Elasticsearch 서비스에 은전한닢 플러그인이 추가 됐습니다. 예전에는 이런 기능이 없어서 제가 따로 elasko 라고 은전한닢에 패치된 형태의 엘라스틱서치의 도커 형태를 만들었습니다. 이제 시간이 지나서 elasticsearch 6.0 이 나오고 (제가 만든 elasko 는 5.5 기반) 문법도 많이 바뀌고 해서 다시금 정리할 필요가 있습니다.

Elasticsearch 편하게 쓰는걸 원하신다면

  1. AWS 에 있는 서비스 추천입니다.
    • 기업 서비스용이라면 100% 추천입니다.
    • kibana 까지 이용하실려면 vpc 가 아닌 ip 기반으로 관리를 선택하세요

그러나 가난한 개인 개발자라면 한달에 EC2 가격만 해도 부담이 되겠지요. 이 글은 가난한 개발자들 위주로 진행하겠습니다. EC2 한대만 허용되어 있다면 docker 에 elasticsearch 를 이용해서 적용하는것이 가성비가 훌륭한 선택입니다.


  1. Elasticsearch 6.1.1 설치하기
    $ docker run -dit --name elastic -p 9200:9200 -p 9300:9300 \
        docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    

    편하게 elasticsearch 가 설치됩니다.  


  2. elastic 컨테이너에 접속하기
    $ docker exec -it elastic /bin/bash
    

    접속해서 root console이 뜹니다.


  3. zip 설치하기

    필요한 것만 설치되어 있는 docker 컨테이너 특성상 zip 이 없습니다.

    # yum install zip
    

    마지막에 물어보는 대답에 'y' 하시면 됩니다.


  4. 은전한닢 패치하기
    $ 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
    

  5. Elasticsearch 재시작

    꼭 해야 하는지는 모르겠지만 한번쯤 해주는 것도 나쁘지 않아 보입니다.

    $ ps -ef | grep elasticsearch
    

    로 찾은 process 번호를

    $ kill -SIGTERM [process id]
    

    로 죽이면. 컨테이너 밖으로 튕겨 나가게 됩니다.

    $ docker start elastic
    

    밖에서 이 명령으로 다시 띄우시고


  6. 테스트 하기

    제대로 패치된게 맞는지 확인합니다. 기존 은전한닢 사이트에서 제공하는 확인 스크립트를 새버젼 (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++"
    }
    '