무한 정보 세상 헤쳐나가기

Elasticsearch에 은전한닢(mecab) 설치 하기


## Elasticsearch에 은전한닢(mecab) 설치 하기

Elasticsearch에서 한글 검색을 공식 지원하지 않기 때문에 한글형태소 분석기를 붙여야 한다.

한글형태소 분석기도 종류가 많겠지만 엘라스틱서치에는 은전한닢이 많이 사용되는 것으로 보인다.

따라서, 은전한닢을 설치하보고 방법을 정리해 본다.

**전체 설치내용 리스트**
- [elasticsearch 설치 및 클러스터링(clustering) 구성 하기](https://blog.indexall.net/2017/05/installing-elasticsearch-and-configuring-clustering.html)
- [Elasticsearch head 설치 하기](https://blog.indexall.net/2017/05/install-elasticsearch-head.html)
- [Elasticsearch에 은전한닢(mecab) 설치 하기](https://blog.indexall.net/2017/05/installing-mecab-in-elasticsearch.html)

### 설치

mecab-ko 사이트 : 
[https://bitbucket.org/eunjeon/mecab-ko/overview](https://bitbucket.org/eunjeon/mecab-ko/overview)

mecab-ko-dic 사이트 : 
[https://bitbucket.org/eunjeon/mecab-ko-dic/overview](https://bitbucket.org/eunjeon/mecab-ko-dic/overview)

#### 은전한닢(mecab-ko) 설치
의존성 설치
```
$ yum install make automake perl gcc gcc-c++
```

mecab-ko 다운로드
```
$ cd /opt
$ wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
$ tar xvf mecab-0.996-ko-0.9.2.tar.gz
```

빌드 및 설치
```
$ cd /opt/mecab-0.996-ko-0.9.2
$ ./configure
$ make
$ make check
$ make install
$ ldconfig
```

#### 사전 설치(mecab-ko-dic)
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-2.0.1-20150920
$ ./autogen.sh
$ ./configure
$ make
$ make install
```

테스트
```
$ mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
문장 입력
```
### mecab-java 설치
환경 변수 설정
```
$ export JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8
```

mecab-java 다운로드
```
$ cd /opt
$ wget https://mecab.googlecode.com/files/mecab-java-0.996.tar.gz
$ tar xvf mecab-java-0.996.tar.gz
```

빌드 및 설치
```
$ cd /opt/mecab-java-0.996
$ sed -i 's|/usr/lib/jvm/java-6-openjdk/include|/usr/lib/jvm/java-8-oracle/include|' Makefile
$ make
```

빌드된 파일 이동(elasticsearch 실행시 참조해주어야 함)
```
$ cp libMeCab.so /usr/local/lib
```

#### mecab elasticsearch 플러그인 설치
elasticsearch 플러그인은 elasticsearch 버전과 플러그인 버전이 맞아야 제대로 설치가 되는데, 현시점에서 elasticsearch 버전은 5.1.2, 플러그인 최신 버전은 5.1.1 로 설치가 되지 않았다.

일단 5.1.1 플러그인을 받아 압축해제하여 plugin-descriptor.properties 파일의 elasticsearch 버전을 수정후 재압축해서 사용하였다.

```
$ ./elasticsearch-plugin install file:///elasticsearch-mecab/elasticsearch-analysis-mecab-ko-5.1.1.0.zip
-> Downloading file:///elasticsearch-mecab/elasticsearch-analysis-mecab-ko-5.1.1.0.zip
[=================================================] 100%??
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission loadLibrary.MeCab
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed elasticsearch-analysis-mecab-ko
[root@94150aea3fdd bin]#
```

#### 환경변수 추가
elasticsearch 실행하는 계정으로 로그인

```
$ vi .bash_profile
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

$ source .bash_profile
```



### 테스트
한글형태소 분석이 되었을 때와 되지 않았을 때를 비교는 다음과 같이 하면 된다.

- 한글형태소 분석이 안된 경우
```
curl -XGET http://localhost:9200/_analyze -d '아버지가 방에 들어간다.'
```

- 한글형태소 분석이 된 경우

한글형태소 분석기를 적용하려면 먼저 analyzer 를 설정해 줘야 한다. 자세한 설명은 길어 지므로 다음과 같이 curl을 날린다.

```
curl -XPUT http://localhost:9200/korean/ -d '{
  "settings" : {
    "index":{
      "analysis":{
        "analyzer":{
          "korean":{
            "type":"custom",
            "tokenizer":"mecab_ko_standard_tokenizer"
          }
        }
      }
    }
  },
  "mappings": {
    "text" : {
      "properties" : {
        "text" : {
          "type" : "string",
          "analyzer": "korean"
        }
      }
    }
  }
}'
```

확인
```
curl -XGET http://localhost:9200/korean/_analyze?analyzer=korean -d '아버지가 방에 들어간다'
```

- [elasticsearch 설치 및 클러스터링(clustering) 구성 하기](https://blog.indexall.net/2017/05/installing-elasticsearch-and-configuring-clustering.html)
- [Elasticsearch head 설치 하기](https://blog.indexall.net/2017/05/install-elasticsearch-head.html)