ElasticSearch comment intégrer Mysql
dans un de mes projets, j'envisage D'utiliser ElasticSearch avec mysql. J'ai installé avec succès ElasticSearch. Je suis capable de gérer index EN ES séparément. mais je ne sais pas comment appliquer la même chose avec mysql.
j'ai lu quelques documents, mais je suis un peu confus et ne pas avoir d'idée claire. quelqu'un peut-il m'aider?
Merci d'avance.
5 réponses
à partir de ES 5.x, ils ont donné cette caractéristique hors de la boîte avec logstash plugin.
ceci importera périodiquement des données de la base de données et poussera vers le serveur ES.
il faut créer un simple fichier d'importation donné ci-dessous (qui est aussi décrit ici) et utilisez logstash pour exécuter le script. Logstash supporte l'exécution de ce script selon un planning.
# 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
Vous pouvez télécharger le jar mysql à partir de maven ici.
dans le cas où les index n'existent pas dans ES quand ce script est exécuté, ils seront créés automatiquement. Tout comme un appel normal à elasticsearch
finalement j'ai pu trouver la réponse. partage de mes découvertes.
pour utiliser ElasticSearch avec Mysql vous aurez besoin de la connexion de base de données Java ( JDBC) de l'importateur. avec les pilotes JDBC, vous pouvez synchroniser vos données mysql dans elasticsearch.
j'utilise ubuntu 14.04 LTS et vous aurez besoin d'installer Java8 pour exécuter elasticsearch comme il est écrit en Java
voici les étapes pour installer ElasticSearch 2.2.0 et ElasticSearch-jdbc 2.2.0 et s'il vous plaît note les deux versions doivent être identiques
après avoir installé Java8 ..... installer elasticsearch 2.2.0 comme suit
# 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
cette procédure d'installation installera Elasticsearch dans /usr/share/elasticsearch/ dont les fichiers de configuration seront placés dans /etc/elasticsearch .
permet maintenant de faire un peu de configuration de base dans le fichier de configuration. ici /etc/elasticsearch/elasticsearch.yml est notre fichier de configuration vous pouvez ouvrir le fichier à modifier par
nano /etc/elasticsearch/elasticsearch.yml
et le changement du nom du cluster et le nom du noeud
Par exemple :
# ---------------------------------- 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
Maintenant, sauvegardez le fichier et lancez elasticsearch
/etc/init.d/elasticsearch start
pour tester ES installé ou ne pas exécuter de suite
curl -XGET 'http://localhost:9200/?pretty'
Si vous obtenez les informations suivantes, puis votre elasticsearch est installé maintenant :)
{
"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"
}
maintenant installons elasticsearch-JDBC
télécharger à partir de http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip
et extrayez-le dans /etc/elasticsearch/ et de créer des "logs" dossier là aussi ( chemin de journaux doivent être /etc/elasticsearch/logs)
j'ai une base de données dans mysql ayant le nom de "ElasticSearchDatabase" et à l'intérieur qu' table nommée "test" avec les champs id,nom et email
cd /etc/elasticsearch
et exécuter suivant
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"
maintenant, vérifiez si les données mysql importées en ES ou non
curl -XGET http://localhost:9200/users/_search/?pretty
si tout se passe bien, vous pourrez voir toutes vos données mysql au format json et s'il y a une erreur, vous pourrez les voir dans /etc/elasticsearch/logs/jdbc.fichier journal
Attention :
dans les versions plus anciennes de ES ... plugin Elasticsearch-rivière-jdbc a été utilisé qui est complètement déprécié dans la dernière version, afin de ne pas l'utiliser.
j'espère que je pourrais économiser votre temps :)
toute autre réflexion est appréciée
url de référence:https://github.com/jprante/elasticsearch-jdbc
le plugin logstash JDBC fera l'affaire:
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}"
}
}
pour le rendre plus simple, j'ai créé une classe PHP à Setup MySQL with Elasticsearch. En utilisant ma classe, vous pouvez synchroniser vos données MySQL dans elasticsearch et aussi effectuer une recherche plein texte. Vous avez juste besoin de définir votre requête SQL et la classe fera le reste pour vous.
L'officiel Elasticsearch client php peut être trouvé à:
https://github.com/elastic/elasticsearch-php
Si vous souhaitez plus d'informations sur Elasticsearch en PHP c'est une bonne lecture:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html