개요

ES 5.1.1, 은전한닢 설치 가이드에 이어 ES 5.2.0 기준으로 은전한닢을 설치하는 방법을 정리하여 공유한다.

ES 5.2.2용 은전한닢 플러그인

은전한닢 홈페이지에 fwang님이 올려주신5.2.2 버전용 은전한닢 ES 플러그인을 참고 바란다. 다만 필자가 직접 돌려보지 않아 동작 여부는 알지 못하지만 되지 않을까 한다.
필자가 다시 5.3.0용 플러그인5.4.0용 플러그인을 만들어 공유해두었다.

설치방법

ES 5.2.0 다운로드

ES 5.2.0을 다운로드 받아서 압축을 푼다.

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.tar.gz       
$ tar xzvf elasticsearch-5.2.0.tar.gz        
$ cd elasticsearch-5.2.0         

mecab-ko 라이브러리 설치

  • https://bitbucket.org/eunjeon/mecab-ko/downloads에서 최신 버전 다운로드
  • 현재 기준 5.2.0과 mecab-0.996-ko-0.9.2.tar.gz 호환 문제 없음

    $ sudo apt-get install g++ #의외로 이걸로 에러가 발생 할 수 있음
    $ wget http://www.kwangsiklee.com/wp-content/uploads/2017/02/mecab-0.996-ko-0.9.2.tar-1.gz
    $ tar -xvzf mecab-XX-ko-XX.tar.gz
    $ cd mecab-XX-ko-XX
    $ ./configure
    $ make
    $ make check
    $ sudo make install
    $ sudo ldconfig 라이브러리는 기본적으로 /usr/local/lib/ 에 설치 된다.
    

mecab-ko-dic 사전 설치

  • https://bitbucket.org/eunjeon/mecab-ko-dic/downloads 에서 최신버전 다운로드
  • 현재 기준 5.2.0과 mecab-ko-dic-2.0.1-20150920.tar.gz 호환 문제 없음

    $ wget http://www.kwangsiklee.com/wp-content/uploads/2017/02/mecab-ko-dic-2.0.1-20150920.tar.gz
    $ tar -xvzf mecab-ko-dic-XX.tar.gz $ cd mecab-ko-dic-XX
    $ ./configure
    $ make
    $ sudo make install 사전은 기본적으로 /usr/local/lib/mecab/dic/mecab-ko-dic에 설치 된다.
    

analysis-mecab-ko 플러그인 설치

ES 5.2.0용 analysis-mecab-ko 플러그인이 아직 은전한닢 페이지에서 개발이 되어 있지 않은 관계로 직접 소스코드로 5.2.0 플러그인을 빌드하였다.

$ ./bin/elasticsearch-plugin install https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/issues/attachments/7/eunjeon/mecab-ko-lucene-analyzer/1486603969.8/7/elasticsearch-analysis-mecab-ko-5.2.0.0.zip
$ # 경고 메세지는 y로 넘어가면 된다.

설치시 아래와 같이 진행 된다.

mecab-java 다시 컴파일

make 전에 링크 참고하여 컴파일 옵션 바꾸기

$ wget https://bitbucket.org/eunjeon/mecab-java/downloads/mecab-java-0.996.tar.gz
$ tar zxvf mecab-java-0.996.tar.gz
$ cd mecab-java-0.996
$ vi Makefile

Makefile에서 바꿀 부분은 2가지 이다.

(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx $(INC) 라인을 $(CXX) -O1 -c -fpic $(TARGET)_wrap.cxx $(INC) 으로 바꾼다.

INCLUDE 부분을 INCLUDE=/usr/lib/jvm/java-8-oracle/include 이런식으로 본인에 맞게 변경한다.

$ make
$ cp MeCab.jar /home/lks21c/elasticsearch-5.1.1/plugins/elasticsearch-analysis-mecab-ko/elasticsearch-analysis-mecab-ko-5.1.1.0.jar #경로는 맞게 변경
$ sudo cp libMeCab.so /usr/local/lib

환경변수 설정

export ES_JAVA_OPTS="${ES_JAVA_OPTS} -Djava.library.path=/usr/local/lib"

검증

ES를 띄우고 아래의 쉘 스크립트로 한글 형태소 분석이 정상 동작하는지 확인해본다.

#!/usr/bin/env bash

ES='http://localhost:9200'
ESIDX='seunjeon-idx'

echo "put setting"
curl -XPUT "${ES}/${ESIDX}/?pretty" -d '{
  "settings" : {
    "index":{
      "analysis":{
        "analyzer":{
          "korean":{
            "type":"custom",
            "tokenizer":"seunjeon_default_tokenizer"
          }
        },
        "tokenizer": {
          "seunjeon_default_tokenizer": {
            "type": "mecab_ko_standard_tokenizer",
            "mecab_args": "/usr/local/lib/mecab/dic/mecab-ko-dic"
          }
        }
      }
    }
  }
}'

sleep 1

echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '삼성전자'
echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '빨라짐'
echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '낄끼빠빠 어그로'
echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '미노야 오늘 밤에 밥 한번 만들어줘라 바비동생이 너무 빠르게 밥먹다 체했다 미노가 빠르던 느리던 꼭꼭 씹어서 먹는법 좀 알려줘라'

echo "delete index"
curl -XDELETE "${ES}/${ESIDX}?pretty"

쉘 실행 시 아래와 같이 한글 토큰이 분절되면 성공이다.