개요

해당내용은 회사후배가 열심히 찾아보고 정리한 내용을 나중에도 찾아보기 쉽게 리마인드 차원에서 포스팅한다.

설치방법

mecab-ko 라이브러리 설치

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

    $ sudo apt-get install g++ #의외로 이걸로 에러가 발생 할 수 있음 
    $ 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.1.1과 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 plugin 설치

$ ./bin/elasticsearch-plugin install https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/elasticsearch-analysis-mecab-ko-5.1.1.0.zip

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"