Nuestros mejores programadores han agotado sus depósitos de café, por su búsqueda día y noche por la respuesta, hasta que Raquel encontró el resultado en GitLab y en este momento la comparte con nosotros.
Solución:
A partir de ES 5.x, han proporcionado esta función de fábrica con el complemento logstash.
Esto importará periódicamente datos de la base de datos y los enviará al servidor ES.
Uno tiene que crear un archivo de importación simple que se proporciona a continuación (que también se describe aquí) y usar logstash para ejecutar el script. Logstash admite la ejecución de este script en un horario.
# 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
Puede descargar el jar mysql de maven aquí.
En caso de que los índices no existan en ES cuando se ejecute este script, se crearán automáticamente. Como una llamada posterior normal a elasticsearch
Finalmente pude encontrar la respuesta. compartiendo mis hallazgos.
Para usar ElasticSearch con Mysql, necesitará The Java Database Connection (JDBC) importador. con los controladores JDBC puede sincronizar sus datos mysql en elasticsearch.
Estoy usando ubuntu 14.04 LTS y necesitará instalar Java8 para ejecutar elasticsearch como está escrito en Java
los siguientes son pasos para instalar ElasticSearch 2.2.0 y ElasticSearch-jdbc 2.2.0 y tenga en cuenta ambas versiones tienen que ser iguales
después de instalar Java8 ….. instale elasticsearch 2.2.0 de la siguiente manera
# 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
Este procedimiento de instalación instalará Elasticsearch en / usr / share / elasticsearch / cuyos archivos de configuración se colocarán en / etc / elasticsearch.
Ahora hagamos una configuración básica en el archivo de configuración. aquí /etc/elasticsearch/elasticsearch.yml es nuestro archivo de configuración, puede abrir el archivo para cambiarlo
nano /etc/elasticsearch/elasticsearch.yml
y cambiar el nombre del clúster y el nombre del nodo
Por ejemplo :
# ---------------------------------- 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
Ahora guarde el archivo e inicie elasticsearch
/etc/init.d/elasticsearch start
para probar ES instalado o no se ejecuta siguiendo
curl -XGET 'http://localhost:9200/?pretty'
Si sigue, entonces su elasticsearch está instalado ahora 🙂
"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"
Ahora instalemos elasticsearch-JDBC
descargarlo de http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip
y extraiga lo mismo en / etc / elasticsearch / y cree la carpeta “registros” también allí (la ruta de los registros debe ser / etc / elasticsearch / logs)
Tengo una base de datos creada en mysql con nombre “ElasticSearchDatabase“y dentro de eso tabla llamada “prueba” con campos id, nombre y correo electrónico
cd /etc/elasticsearch
y corre siguiendo
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"
ahora verifique si los datos de mysql se importaron en ES o no
curl -XGET http://localhost:9200/users/_search/?pretty
Si todo va bien, podrá ver todos sus datos de mysql en formato json y si hay algún error, podrá verlos en el archivo /etc/elasticsearch/logs/jdbc.log
Precaución :
En versiones anteriores del complemento ES … Elasticsearch-río-jdbc se usó, que está completamente obsoleto en la última versión, así que no lo use.
Espero poder ahorrar tu tiempo 🙂
Cualquier otro pensamiento es apreciado.
URL de referencia: https://github.com/jprante/elasticsearch-jdbc
El complemento logstash JDBC hará el trabajo:
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"
Si haces scroll puedes encontrar las referencias de otros gestores de proyectos, tú todavía puedes insertar el tuyo si dominas el tema.