본문 바로가기

엔지니어/Linux

elasticsearch 검색 엔진 만들기 (with jdbc, 은전한닢)

728x90
반응형
Elasticsearch(엘라스틱서치)와 SOLR(솔라)의 공통점
1. 루씬을 기반으로 한 텍스트 검색 엔진 라이브러리이다.
2. Restful API를 제공한다.
3. Cache를 지원한다.
4. 분산처리에 용이하다.
5. Spring Component를 지원한다.


Elasticsearch(엘라스틱서치)와 SOLR(솔라)  비교
                                         Solr                              ElasticSearch
도큐먼트 형식            XML, CSV, JSON                         JSON
다중 스키마 문서           지원하지 않음                         지원
조인                             지원하지 않음               Parent_type/Children_type
분산 시스템 노드 연결        주키퍼                         디스커버리, 주키퍼
MySQL 불러오기          dataimportHandler                   logstrash


Elasticsearch(엘라스틱서치) ?
Elasticsearch(엘라스틱서치) 는 앞서 말했듯, 루씬을 기반으로 한 텍스트 검색 엔진 라이브러리이다. 사전 매핑 없이 JSON 문서 형식으로 입력하면 별도의 이벤트가 없어도 바로 색인을 시작한다. 이렇게 저장된 데이터는 별도의 재시작/갱신 없이도 바로 검색에 사용될 수 있다. 이는 곧 색인 작업이 완료됨과 동시에 검색이 가능하다는걸 의미한다. 이러한 특징들 덕분에 SOLR(솔라) 와 비교하여 실시간 검색 엔진 구현에 좀 더 적합하다.



Elasticsearch(엘라스틱서치) 와 관계형 데이터베이스
Elasticsearch(엘라스틱서치) 를 쉽게 이해하기 위해 사용되는 용어들을 관계형 데이터베이스와 비교하면 쉽게 받아드릴수 있다.

               RDB                                            Elasticsearch
          DATABASE                                          INDEX
          TABLE                                                  TYPE
          ROW                                                 DOCUMENT
COLUMN                                               FEILD
SCHEMA                                             MAPPING


elasticsearch version = 5.1.1
logstash version = 5.1.1
OS version = centos 7.n

사전 작업

echo "elasticsearch hard nofile 65536" >>  /etc/security/limits.conf
echo "elasticsearch soft nofile 65536" >>  /etc/security/limits.conf
echo "elasticsearch hard nproc 65536" >>  /etc/security/limits.conf
echo "elasticsearch soft nproc 65536" >>  /etc/security/limits.conf
echo "root hard nofile 65536" >>  /etc/security/limits.conf
echo "root soft nofile 65536" >>  /etc/security/limits.conf
echo "root hard nproc 65536" >>  /etc/security/limits.conf
echo "root soft nproc 65536" >>  /etc/security/limits.conf
echo "nobody hard nofile 65536" >>  /etc/security/limits.conf
echo "nobody soft nofile 65536" >>  /etc/security/limits.conf
echo "nobody hard nproc 65536" >>  /etc/security/limits.conf
echo "nobody soft nproc 65536" >>  /etc/security/limits.conf


vi /usr/lib/sysctl.d/00-system.conf
===============================================
vm.max_map_count = 262144
===============================================

yum install wget rdate unzipepel-release epel*  -y && rdate -s time.bora.net

cd ~ && wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"

 yum -y localinstall jdk-8u73-linux-x64.rpm &&  rm -rf ~/jdk-8u*-linux-x64.rpm &&  java -version

reboot

Elasticsearch(엘라스틱서치) 설치

cd /usr/local/src
tar xvf elasticsearch-5.1.1.tar.gz
cd elasticsearch-5.1.1

vi config/elasticsearch.yml
===============================================
network : 0.0.0.0
===============================================

groupadd elasticsearch
useradd elasticsearch -g elasticsearch -p elasticsearch

chown -R elasticsearch:elasticsearch /usr/local/src/elasticsearch-5.1.1

su elasticsearch
$ cd /usr/local/src/elasticsearch-5.1.1/bin/elasticsearch -d

Logstash(로그스테시) 설치

su -
cd /usr/local/src
tar xvf logstash-5.1.1.tar.gz

cd logstash-5.1.1
vi logstash-test.conf
===============================================

input {
    stdin {}
}

output {
    elasticsearch {
        hosts => "localhost:9200"
    }
    stdout {
        codec => rubydebug
    }
}
===============================================

bin/logstash -f logstash-test.conf

-----------JDBC 설치 ------------

1.9버전까지는 reiver라는 친구를 이용하여 MySQL에 데이터를 불러왔었는데, 2.0버전부터 공식적인 지원을 중단하였다. 엘라스틱은 이후 logstash를 이용하여 MySQL의 데이터를 불러오기를 권장하고 있다.

SOLR 와 다르게 Logstash 가 Mysql 에서 data 를 가져올때 logstash 가 가져옴 (SOLR 는 dataimporthandler 가 가져옴)

cd /usr/local/src
yum -y install unzip
unzip elasticsearch-jdbc-2.1.1.2-dist.zip

cd elasticsearch-jdbc-2.1.1.2
cp lib/mysql-connector-java-5.1.33.jar ../../elasticsearch-5.1.1/lib/

/usr/local/src/logstash-5.1.1/bin/logstash-plugin list jdbc
/usr/local/src/logstash-5.1.1/bin/logstash-plugin install logstash-input-jdbc
 
vi logstash-mysql-test.conf
==============================================
input {
    jdbc {
        jdbc_driver_library => "/usr/local/src/elasticsearch-5.1.1/lib/mysql-connector-java-5.1.33.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://DB.SERVER.IPorDOMAIN:3306/sksk"
        jdbc_user => "USER"
        jdbc_password => "PASSWORD"
        statement => "SELECT * FROM [Table name]"
        schedule => "* * * * *"
    }
}
output {
    elasticsearch {
        hosts => "localhost:9200"
    }    stdout {
        codec => rubydebug
    }
}
==============================================

/usr/local/src/logstash-5.1.1/bin/logstash -f logstash-mysql-test.conf

DB data를 실시간으로 계속 가져오는 것을 볼 수 있다.


-----------은전한닢 ------------

mecab-ko  : 형태소 분석기
mecab-ko-dic : 한국어 사전
mecab-java : 메모리 누수가 해결된 버전
elasticsearch mecab-ko 플러그인


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
# java path 설정.               ; INCLUDE=/usr/lib/jvm/java-7-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










반응형

'엔지니어 > Linux' 카테고리의 다른 글

nginx_stats(zabbix nginx script)  (0) 2017.01.16
nginx 1.8 + tomcat 8  (0) 2017.01.16
ats 모듈 만들기  (0) 2017.01.13
Apache traffic server-5.2.1 install  (0) 2017.01.13
SOLR 5.5.2 단독형 설치 (with jdbc, arirang.lucene-analyzer)  (0) 2017.01.11