2015년 12월 8일 화요일

django haystack, elasticsearch 그리고 은전한닢 연동(1)

django haystack은 여러 검색엔진을 쉽게 사용할 수 있게 해주는 django App이다.

Potenup의 검색엔진은 가볍게 whoosh를 사용하려 했지만 한글 검색이 용이하지 못한 문제로 elasticsearch를 사용하기로 했다.

한글 형태소 분석기는 은전한닢을 사용했다.(은전한닢 개발자님 정말 감사합니다.)

django를 통한 개발은 전반적으로 쉬웠지만 유독 검색엔진을 붙이는 과정에서 많은 어려움을 겪어 해결한 방법들을 정리해서 올리고자 한다.

1. haystack 설치
haystack은 공식 문서로 잘정리되어 있기 때문에 적지 않는다.
http://django-haystack.readthedocs.org/

2. elasticsearch 설치
설치 과정은 단순히 공식 사이트https://www.elastic.co/에서 다운받아서 tar압축을 풀면 끝이다. 단, 주의할 점은 haystack 버전2.0 이상부터 elasticsearch를 지원한다는 점이다. 또한 elasticsearch는 현재 버전(2.0)에선 은전한닢(0.996)이 설치되지 않으니(정확히는 elasticsearch plugin) 1.7버전을 사용해야 한다.(은전한닢의 개발자님께서 추후에 설치되도록 업데이트 한다는 말을 하셨다)

3. 은전한닢 설치
다음과 같은 과정을 따른다.
http://guruble.com/?p=416 님의 블로그 참조

아래는 Hosang Jeon님의 블로그 글 전문
--------------------------------------------------------------------------------------------------
mecab-ko analysis plugin 은 mecab-ko-lucene-analyzer를 Elasticsearch 에서 사용할 수 있도록 하는 플러그인입니다. mecab-ko lucene analyzer 는 “은전한닢 프로젝트”라고 불리우는 오픈소스 한국어 형태소 분석기이며 http://eunjeon.blogspot.kr/ 에서 자세한 내용을 확인해볼 수 있습니다.
MeCab(메카브)는 원래 일본어 형태소 분석기를 위해 공개된 오픈소스이며, 이를 한국어 형태소 분석에 맞도록 확장한 것이 바로 MeCab-ko 입니다. MeCab-ko 형태소 분석기 플러그인은 설치 과정이 다소 복잡한 편인데 크게 다음과 같은 4개의 단계로 설치됩니다.
  1. mecab-ko 형태소 분석기 엔진 설치
  2. mecab-ko-dic 사전(dictionary)파일 설치
  3. libMeCab.so, MeCab.jar 라이브러리 설치
  4. mecab-ko Elasticsearch plugin 설치
주의. MeCab-ko analyzer for Elasticsearch 는 linux 환경에서만 정상 동작합니다. Mac OSX 환경에서는 동작하지 않습니다.

1. PREREQUISITE

mecab-ko analysis plugin 을 사용하기 위해서는 Elasticsearch 가 설치되어 있어야 합니다. Elasticsearch 의 설치는 Elasticsearch – 1. 시작하기 포스트를 참고하시되, 원하는 버전을 선택하여 설치하시면 됩니다. 이 포스트는 Elasticsearch version 1.4.4 기준으로 테스트 하였습니다.

2. MECAB-KO 형태소 분석기 엔진 설치

먼저, mecab-ko 소스파일을 다운로드 받고 압축을 해제한 뒤 설치합니다. 현재(2015.05.05) 기준으로 가장 최신 버전은 0.9.2 입니다.
설치가 완료되면 아래의 명령어를 통해 정상적으로 설치되었는지 여부를 확인합니다.
설치과정에서 문제가 발생하거나, 좀 더 상세한 내용을 알고 싶을 때에는https://bitbucket.org/eunjeon/mecab-ko-dic를 참고하시기 바랍니다.

3. MECAB-KO-DIC 사전(DICTIONARY) 파일

mecab-ko 의 설치가 완료되었으면, 이제 dictionary 파일을 다운로드 받을 차례 입니다. 현재(2015.05.05) 기준으로 가장 최신의 stable 버전은 1.6.1-20140814 입니다.
아래와 같은 순서로 mecab-ko-dic 을 다운로드 및 설치합니다. 설치 과정에서 문제가 발생하는 경우 https://bitbucket.org/eunjeon/mecab-ko-dic 링크를 참고하여 문제를 해결합니다.
설치가 완료되면 mecab-ko dictionary 파일이 설치된 경로가 마지막 로그에 출력됩니다. 기본적으로 사전파일은 /usr/local/lib/mecab/dic/mecab-ko-dic 에 설치되게 됩니다.

4. MECAB-KO 형태소 분석기와 MECAB-KO-DIC 사전파일 확인

2번과 3번이 정상적으로 진행되었다면 아래와 같이 설치 결과를 확인하도록 합니다.

5. LIBMECAB.SO, MECAB.JAR 설치

mecab-ko Elasticsearch 플러그인을 사용하기 위해서는 mecab-ko 형태소 분석기와 mecab-ko 사전파일 뿐만 아니라, libMeCab.so, MeCab.jar 라이브러리도 필요합니다. 아래와 같은 순서대로 해당 라이브러리를 설치합니다.
Makefile 을 열어서 아래와 같이 설정정보를 수정합니다.
Makefile 을 수정하였다면 아래와 같이 라이브러리 파일을 컴파일하여 복사하도록 합니다.
만약, make 과정에서 jni_md.h 파일이 없다는 컴파일 오류 발생시 다음과 같은 방법으로 해결합니다.

6. MECAB-KO ELASTICSEARCH PLUGIN 설치

이제 기본적인 준비가 완료되었으므로, mecab-ko Elasticsearch 용 플러그인을 설치해보도록 하겠습니다.
아래와 같이 가장 최신의 mecab-ko Elasticsearch plugin 파일을 다운로드 합니다. 현재(2015.05.05) 기준으로 가장 최신의 플러그인 버전은 0.16.1 입니다.
다운로드가 완료되면 압축을 해제하여 다음의 파일들이 정상적으로 있는지 확인합니다.
이제 다운로드된 플러그인을 설치합니다.

7. TEST

이제 모든 설치가 완료되었습니다.
MeCab-ko 한국어 형태소 분석기 플러그인이 정상적으로 동작하는지 확인해 보도록 하겠습니다.
먼저, Elasticsearch 인스턴스(노드)를 재실행 합니다. 단, elasticsearch 노드를 시작할 때 다음과 같이 추가 라이브러리 경로를 지정해 주어야 합니다.
아래의 명령어들은 터미널에서 순차적으로 실행합니다.
만약, Elasticsearch query 를 실행하였을 때, elasticsearch 노드가 다음과 같은 오류를 발생하며 중지되는 경우 다음의 방법으로 해결합니다.
# 오류 내용
# 해결 방법
열린 파일 내용에서 /usr/local/lib 가 포함되어 있는지 확인하여 없다면 추가해줍니다.
아래의 명령어를 통해서 다음과 같은 결과가 출력되면 정상적인 것 입니다.
결과

댓글 없음:

댓글 쓰기