본문 바로가기
서버

[Elasticsearch] 은전한잎 설치

by 탁구치는 개발자 2018. 1. 24.
elasticsearch version2.4.6
lucene version5.5.4


root 계정으로 설치를 진행해야 한다.

참고로 root 계정의 환경 변수에 java 실행 패스가 등록되어 있어야 한다.


1. 은전한잎(mecab-ko) 설치 (형태소 분석기 엔진)

# 다운로드

$ cd /opt

$ sudo wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz

$ sudo tar xvf mecab-0.996-ko-0.9.2.tar.gz


# 빌드 및 설치

$ cd /opt/mecab-0.996-ko-0.9.2

$ sudo ./configure

$ sudo make

$ sudo make check

$ sudo make install

$ sudo ldconfig


# 설치가 완료되었다면 버전 확인

$ mecab -v

$ mecab-config --version


# /usr/local/lib 디렉토리에 아래 라이브러리 추가 된다.

-rw-r--r--  1 root root  2974560 Jan 24 05:20 libmecab.a

-rwxr-xr-x  1 root root      956 Jan 24 05:20 libmecab.la

lrwxrwxrwx  1 root root       17 Jan 24 05:20 libmecab.so -> libmecab.so.2.0.0

lrwxrwxrwx  1 root root       17 Jan 24 05:20 libmecab.so.2 -> libmecab.so.2.0.0

-rwxr-xr-x  1 root root  1955619 Jan 24 05:20 libmecab.so.2.0.0


# 참고

설치 과정에서 출력되는 ...를 위해 할 일이 없습니다  라는 메시지는 man, doc, tests 와 관련된 내용이므로 무시



2. mecab-ko-dic 설치 (사전 파일)

# 다운로드

$ cd /opt

$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150920.tar.gz

$ tar xvf mecab-ko-dic-2.0.1-20150920.tar.gz


# 빌드 및 설치

$ cd /opt/mecab-ko-dic-1.6.1-20140814

$ sudo ./autogen.sh

$ sudo ./configure

아래 오류 발생

checking for mecab-config... no

configure: error: mecab-config is not found in your system

해결 방법

sudo ./configure --with-mecab-config=/opt/mecab-0.996-ko-0.9.2/mecab-config

$ sudo make

$ sudo make install


# 설치 경로

사전 파일은 /usr/local/lib/mecab/dic/mecab-ko-dic 설치된다.


# 정상 설치 테스트

$ mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic

나는 이남규입니다.

나      NP,*,F,나,*,*,*,*

는      JX,*,T,는,*,*,*,*

이남규  NNP,인명,F,이남규,*,*,*,*

입니다  VCP+EF,*,F,입니다,Inflect,VCP,EF,이/VCP/*+ㅂ니다/EF/*

.       SF,*,*,*,*,*,*,*

EOS



3. mecab-java 설치

$ sudo wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=0B4y35FiV1wh7NHo1bEJxd0RnSzg' -O mecab-java-0.996.tar.gz

$ sudo tar xvfz mecab-java-0.996.tar.gz

$ sudo vi Makefile

다음과 같이 java 가 설치되어 있는 경로를 설정해 준다.

# java path 설정.               ; INCLUDE=/opt/java/jdk1.7.0_21/include 

# OpenJDK 사용시 "-O1" 로 변경. ; $(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx  $(INC)

# "-cp ." 추가.                 ; $(JAVAC) -cp . test.java

$ sudo make

$ sudo cp libMeCab.so /usr/local/lib

$ sudo cp MeCab.jar /usr/local/lib



4. mecab-ko analysis 플러그인 설치

mecab-ko analysis plugin 은 mecab-ko-lucene-analyzer를 Elasticsearch 에서 사용할 수 있도록 하는 플러그인

해당 플러그인은 mecab_ko_standard_tokenizer을 포함하고 있다.

 - mecab-ko Analysis Plugin의 기본 tokenizer.

 - 추가 설명 : https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/raw/master/elasticsearch-analysis-mecab-ko/


[주의]

ElasticSearch 2.1.0 플러그인부터 plugin 버전을 ElasticSearch 버전에 맞춥니다. 예를 들어 ElasticSearch 2.1.0의 플러그인의 버전은 2.1.0.{patch_version} 입니다.

현재 설치되어 있는 ElasticSearch 버전이 2.4.6 이니 플러그인 버전도 2.4.6.{patch_version} 이어야 한다라는 것이다. 헌데 문제는 2.4.6 버전의 플러그인이 존재하지 않는다.

이럴 때에는 다음과 같은 방법을 따른다.

관련 링크 - https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html#_mandatory_elements_for_java_plugins


1. https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/ 페이지에 접속하여 2.4.6 과 가장 근접한 플러그인을 로컬에 다운로드 한다.

2. https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/elasticsearch-analysis-mecab-ko-2.4.3.0.zip 해당 버전을 다운로드 받음

3. 해당 zip 파일을 압축 해제한 뒤에 plugin-descriptor.properties 파일을 연다.

4. elasticsearch.version 부분에 2.4.6 버전으로 변경

5. zip으로 다시 압축

6. Elasticsearch가 있는 서버에 해당 zip 파일을 업로드 한다.

7. 플로그인 설치 진행

./plugin install file:///home/fxdev/GPORTAL/es/korean/elasticsearch-analysis-mecab-ko-2.4.3.0.zip



5. ElasticSearch 실행

환경 변수 추가 (.bash_profile)

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

export JAVA_HOME=/opt/java/jdk1.7.0_21

export ES_JAVA_OPTS="${ES_JAVA_OPTS} -Djava.library.path=/usr/local/lib -Des.security.manager.enabled=false"

데몬으로 실행

./elasticsearch -d



오류 현상


[현상]

NoClassDefFoundError[Could not initialize class org.bitbucket.eunjeon.mecab_ko_mecab_loader.MeCabLoader];

[해결]

엘라스틱실행 시 -Des.security.manager.enabled=false 옵션 추가 후 실행

ElasticSearch 2.0.0부터 java security manager가 동작하는데, java security manager가 플러그인이 System.loadLibrary()를 허용하지 않습니다. 때문에, -Des.security.manager.enabled=false 옵션을 줘서 실행해야 합니다. ElasticSearch 5.0.0 이상에서는 해당 옵션이 필요하지 않습니다.

관련 링크 - https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_plugin_and_packaging_changes.html#_symbolic_links_and_paths


[현상]

Cannot load the native code.

Make sure your LD_LIBRARY_PATH contains MeCab.so path.

java.lang.UnsatisfiedLinkError: no MeCab in java.library.path

위와 같은 오류가 발생하며 노드가 죽는 현상

[해결]

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

환경 변수에 위의 설정을 추가해 준다.



리눅스


설치를 진행하면서 필요한 패키지들이 있을 수 있어서 일단 기록해 둠

yum install automake

apt-get install g++



테스트



ES='http://localhost:9200'

ESIDX='eunjeon'


curl -XDELETE $ES/$ESIDX


curl -XPUT $ES/$ESIDX/ -d '{

  "settings": {

    "index": {

      "analysis": {

        "analyzer": {

          "korean_index": {

            "type": "custom",

            "tokenizer": "mecab_ko_standard_tokenizer"

          },

          "korean_query": {

            "type": "custom",

            "tokenizer": "korean_query_tokenizer"

          }

        },

        "tokenizer": {

          "korean_query_tokenizer": {

            "type": "mecab_ko_standard_tokenizer",

            "compound_noun_min_length": 100

          }

        }

      }

    }

  }

}'


curl -XGET "$ES/$ESIDX/_analyze?analyzer=korean_index&pretty" -d '무궁화 꽃'

curl -XGET "$ES/$ESIDX/_analyze?analyzer=korean_query&pretty" -d '무궁화 꽃'