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.

41
demandé sur Nikhil Sahu 2016-03-22 13:40:16

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

44
répondu Nikhil Sahu 2017-03-29 16:38:13

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

31
répondu Yaxita Shah 2016-08-01 02:02:45

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}"
  }
}
2
répondu Ijaz Khan 2018-02-20 11:15:01

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.

1
répondu Ahmed Khan 2017-01-03 10:55:28

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

-2
répondu Arno 2016-03-22 10:49:54