elasticsearch version | 2.4.6 |
---|---|
lucene version | 5.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 버전의 플러그인이 존재하지 않는다.
이럴 때에는 다음과 같은 방법을 따른다.
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 이상에서는 해당 옵션이 필요하지 않습니다.
[현상]
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 '무궁화 꽃'
'서버' 카테고리의 다른 글
https://google.com 통신 흐름 완전 분석 (0) | 2024.11.19 |
---|---|
윈도우에서 Docker 테스트 해보자 (0) | 2019.03.25 |
[Elasticsearch] 클러스터 rolling restarts (0) | 2018.02.02 |
[Elasticsearch] 샤드 (Shard) (0) | 2017.12.20 |
[Elasticsearch] 최적화 (0) | 2017.12.20 |
[Elasticsearch] filter 조회가 query 조회보다 빠르다. (0) | 2017.12.11 |
[Elasticsearch] Query 검색 결과 구조 (0) | 2017.12.06 |
[Elasticsearch] 한번 정해진 mapping 속성은 변경 불가 (0) | 2017.12.05 |