ElasticSearch를 Mysql과 통합하는 방법
내 프로젝트 중 하나에서 ElasticSearch를 mysql과 함께 사용할 계획입니다. ElasticSearch를 성공적으로 설치했습니다. ES에서 인덱스를 별도로 관리 할 수 있습니다. 하지만 나는 mysql로 똑같이 구현하는 방법을 모른다.
나는 몇 개의 문서를 읽었지만 약간 혼란스럽고 명확한 생각이 없습니다. 누구든지 나를 도울 수 있습니까?
미리 감사드립니다.
ES 5.x 부터는 logstash 플러그인을 사용 하여이 기능을 즉시 제공했습니다 .
이것은 주기적으로 데이터베이스에서 데이터를 가져와 ES 서버로 푸시합니다.
아래에 제공된 간단한 가져 오기 파일 ( 여기 에서도 설명 됨 )을 만들고 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
여기 maven 에서 mysql jar를 다운로드 할 수 있습니다 .
이 스크립트를 실행할 때 ES에 인덱스가없는 경우 자동으로 생성됩니다. elasticsearch에 대한 일반적인 포스트 호출과 같습니다.
마침내 나는 답을 찾을 수 있었다. 내 결과를 공유합니다.
ElasticSearch를 Mysql과 함께 사용하려면 JDBC (Java Database Connection ) 임포터 가 필요합니다 . JDBC 드라이버를 사용하면 mysql 데이터를 elasticsearch에 동기화 할 수 있습니다.
우분투 14.04 LTS를 사용하고 있으며 Java로 작성된 Elasticsearch를 실행하려면 Java8을 설치해야합니다.
다음은 ElasticSearch 2.2.0 및 ElasticSearch-jdbc 2.2.0 을 설치하는 단계 이며 두 버전이 동일해야합니다.
Java8 설치 후 ..... 다음과 같이 elasticsearch 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
이 설치 절차는 구성 파일이 / etc / elasticsearch에있는 / usr / share / elasticsearch /에 Elasticsearch를 설치합니다.
이제 구성 파일에서 몇 가지 기본 구성을 수행해 보겠습니다. 여기 /etc/elasticsearch/elasticsearch.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
이제 파일을 저장하고 elasticsearch를 시작하십시오.
/etc/init.d/elasticsearch start
설치된 ES를 테스트하거나 다음을 실행하지 않습니다.
curl -XGET 'http://localhost:9200/?pretty'
다음을 받으면 이제 elasticsearch가 설치됩니다. :)
{
"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"
}
이제 elasticsearch-JDBC를 설치하겠습니다.
http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip
/ etc / elasticsearch / 에서 다운로드 하고 동일한 압축을 풀고 거기에도 "logs"폴더를 만듭니다 (로그 경로는 / etc / elasticsearch / logs 여야 함).
이름이 " ElasticSearchDatabase "이고 필드 ID, 이름 및 이메일이있는 "test"라는 테이블 안에 mysql에서 생성 된 데이터베이스가 하나 있습니다.
cd /etc/elasticsearch
다음 실행
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"
이제 ES에서 mysql 데이터를 가져 왔는지 확인하십시오.
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}"
}
}
더 간단하게 만들기 위해 Elasticsearch로 MySQL 을 설정하는 PHP 클래스를 만들었습니다 . my Class를 사용하면 elasticsearch에서 MySQL 데이터를 동기화하고 전체 텍스트 검색을 수행 할 수도 있습니다. SQL 쿼리를 설정하기 만하면 클래스가 나머지 작업을 수행합니다.
공식 Elasticsearch PHP 클라이언트는 다음에서 찾을 수 있습니다.
https://github.com/elastic/elasticsearch-php
PHP에서 Elasticsearch에 대한 더 많은 정보를 원하신다면 다음을 읽어 보시기 바랍니다.
https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html
참조 URL : https://stackoverflow.com/questions/36152152/elasticsearch-how-to-integrate-with-mysql
'IT이야기' 카테고리의 다른 글
Spark를 사용하여 중앙값과 분위수를 찾는 방법 (0) | 2021.03.21 |
---|---|
Chrome에 이미 '$'가 정의되어 있는 것일까 (0) | 2021.03.21 |
Jupyter 노트북에서 셀 출력을 지우는 바로 가기 키 (0) | 2021.03.21 |
CMake는 Boost를 찾지만 가져온 대상은 Boost 버전에서 사용할 수 없을 때 (0) | 2021.03.21 |
JavaScript 함수 호출에서 인수 미리 설정하는 방법 (0) | 2021.03.21 |