ElasticSearch를 MySQL과 통합하는 방법
프로젝트 중 하나에서는 MySQL과 함께 Elastic Search를 사용할 예정입니다.Elastic Search를 설치했습니다.ES에서 인덱스를 별도로 관리할 수 있지만 MySQL에서도 어떻게 구현해야 하는지 모르겠습니다.
저는 몇 가지 문서를 읽었지만, 조금 혼란스럽고 명확한 생각이 나지 않습니다.
ES 5.x 에서는, 이 기능은 logstash 플러그 인으로 즉시 사용할 수 있습니다.
그러면 데이터베이스에서 정기적으로 데이터를 가져오고 ES 서버에 푸시합니다.
아래에 제시된 간단한 Import 파일(여기에서도 설명)을 작성하고 logstash를 사용하여 스크립트를 실행해야 합니다.Logstash는 일정에 따라 이 스크립트를 실행할 수 있도록 지원합니다.
# file: contacts-index-logstash.conf
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "user"
jdbc_password => "pswd"
schedule => "* * * * *"
jdbc_validate_connection => true
jdbc_driver_library => "/path/to/latest/mysql-connector-java-jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
statement => "SELECT * from contacts where updatedAt > :sql_last_value"
}
}
output {
elasticsearch {
protocol => http
index => "contacts"
document_type => "contact"
document_id => "%{id}"
host => "ES_NODE_HOST"
}
}
# "* * * * *" -> run every minute
# sql_last_value is a built in parameter whose value is set to Thursday, 1 January 1970,
# or 0 if use_column_value is true and tracking_column is set
myql jar는 maven에서 다운로드 할 수 있습니다.
이 스크립트를 실행할 때 ES에 인덱스가 존재하지 않는 경우 자동으로 생성됩니다.일반 포스트콜과 마찬가지로 Elastic Search에도 대응
마침내 나는 답을 찾을 수 있었고, 내 조사 결과를 공유했다.
Mysql에서 Elastic Search를 사용하려면 Java Database Connection(JDBC) 임포터가 필요합니다.JDBC 드라이버를 사용하면 mysql 데이터를 탄력 검색으로 동기화할 수 있습니다.
저는 ubuntu 14.04 LTS를 사용하고 있으며, Java로 작성된 대로 Elastic Search를 실행하려면 Java8을 설치해야 합니다.
다음은 Elastic Search 2.2.0과 Elastic Search-jdbc 2.2.0을 설치하는 절차입니다.두 버전이 모두 같아야 합니다.
Java8을 설치한 후 다음과 같이 Elastic Search 2.2.0을 설치합니다.
# cd /opt
# wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.2.0/elasticsearch-2.2.0.deb
# sudo dpkg -i elasticsearch-2.2.0.deb
이 설치 절차에서는 /usr/share/elasticsearch/에 Elasticsearch를 설치합니다.이 설정 파일은 /etc/elasticsearch에 저장됩니다.
다음으로 config 파일에서 몇 가지 기본 설정을 수행합니다.여기 /etc/sysearch/sysearch.yml은 변경할 파일을 열 수 있는 설정 파일입니다.
nano /etc/elasticsearch/elasticsearch.yml
클러스터 이름 및 노드 이름 변경
예를 들어 다음과 같습니다.
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: servercluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: vps.server.com
#
# Add custom attributes to the node:
#
# node.rack: r1
이제 파일을 저장하고 탄력 검색을 시작합니다.
/etc/init.d/elasticsearch start
ES가 설치되어 있는지 또는 실행되지 않는지 테스트합니다.
curl -XGET 'http://localhost:9200/?pretty'
following(팔로우)이 표시되는 경우는, 즉시 Elastic Search 가 인스톨 됩니다.
{
"name" : "vps.server.com",
"cluster_name" : "servercluster",
"version" : {
"number" : "2.2.0",
"build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
"build_timestamp" : "2016-01-27T13:32:39Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}
이제 Elastic Search-JDBC를 설치합니다.
에서 다운로드하여 /etc/setc/setcsearch/에서 동일한 압축을 풀고 "setc" 폴더도 만듭니다(로그 경로는 /etc/setc/setc).
mysql에 "Elastic Search Database"라는 이름으로 작성된 데이터베이스와 해당 테이블 내에 "test"라는 필드 ID, 이름 및 이메일이 있는 데이터베이스가 있습니다.
cd /etc/elasticsearch
및 following을 실행합니다.
echo '{
"type":"jdbc",
"jdbc":{
"url":"jdbc:mysql://localhost:3306/ElasticSearchDatabase",
"user":"root",
"password":"",
"sql":"SELECT id as _id, id, name,email FROM test",
"index":"users",
"type":"users",
"autocommit":"true",
"metrics": {
"enabled" : true
},
"elasticsearch" : {
"cluster" : "servercluster",
"host" : "localhost",
"port" : 9300
}
}
}' | java -cp "/etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/lib/*" -"Dlog4j.configurationFile=file:////etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/bin/log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter"
이제 mysql 데이터가 ES로 Import되었는지 확인합니다.
curl -XGET http://localhost:9200/users/_search/?pretty
모든 것이 정상적으로 진행되면 모든 mysql 데이터가 json 형식으로 표시됩니다.또, 에러가 발생했을 경우는, /etc/elasticsearch/logs/jdbc.log 파일에 표시됩니다.
주의:
ES의 이전 버전에서는 플러그인 Elasticsearch-river-jdbc가 사용되었습니다.이것은 최신 버전에서는 완전히 권장되지 않으므로 사용하지 마십시오.
시간을 절약해 주셨으면 합니다. :)
더 이상 생각해주시면 감사하겠습니다.
참조 URL : https://github.com/jprante/elasticsearch-jdbc
logstash JDBC 플러그인은 다음 작업을 수행합니다.
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
jdbc_user => "root"
jdbc_password => "factweavers"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/home/comp/Downloads/mysql-connector-java-5.1.38.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
# our query
schedule => "* * * *"
statement => "SELECT" * FROM testtable where Date > :sql_last_value order by Date"
use_column_value => true
tracking_column => Date
}
output {
stdout { codec => json_lines }
elasticsearch {
"hosts" => "localhost:9200"
"index" => "test-migrate"
"document_type" => "data"
"document_id" => "%{personid}"
}
}
간단하게 하기 위해 Elastic Search를 사용하여 MySQL을 셋업하기 위한 PHP 클래스를 만들었습니다.My Class를 사용하여 탄력 검색에서 MySQL 데이터를 동기화하고 전체 텍스트 검색을 수행할 수 있습니다.SQL 쿼리를 설정하기만 하면 나머지는 클래스가 대신합니다.
언급URL : https://stackoverflow.com/questions/36152152/how-to-integrate-elasticsearch-with-mysql
'programing' 카테고리의 다른 글
java pojo 클래스, java bean, normal 클래스란 무엇입니까? (0) | 2022.10.18 |
---|---|
입력 종료 잭슨 파서로 인해 매핑할 콘텐츠가 없습니다. (0) | 2022.10.18 |
javascript에서 배열 인덱스의 존재 여부를 확인하는 방법 (0) | 2022.10.08 |
MySQL에서 sqlalchemy 연결을 닫는 방법 (0) | 2022.10.08 |
DB에서 설정을 가져오는 함수에서 오류가 발생했습니다. (0) | 2022.10.08 |