ElasticSearch how to integrate with Mysql

Num dos meus projectos, estou a planear usar a pesquisa elastica com o mysql. Instalei com sucesso a pesquisa elastica. Eu sou capaz de gerir o índice em ES separadamente. mas não sei como implementar o mesmo com o mysql.

Li alguns documentos, mas estou um pouco confuso e não tenho uma ideia clara. alguém me pode ajudar?

Obrigado antecipadamente.

Author: Nikhil Sahu, 2016-03-22

5 answers

A partir do ES 5.x, eles deram esta funcionalidade fora da caixa comlogstash plugin.

Isto irá importar periodicamente dados da base de dados e enviar para o servidor ES.

É preciso criar um ficheiro de importação simples dado em baixo (que também está descrito aqui ) e usar a barra de registo para executar o programa. A barra de Registo suporta a execução deste programa numa programação.

# 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

Você pode baixar o frasco de mysql de maven aqui.

No caso de não existirem índices ES quando este script for executado, eles serão criados automaticamente. Tal como uma chamada normal para a elasticsearch

 44
Author: Nikhil Sahu, 2017-03-29 16:38:13
Finalmente consegui encontrar a resposta. a partilhar as minhas descobertas.

Para usar a pesquisa elastica com o Mysql, irá necessitar da ligação à base de dados Java (JDBC ). com drivers JDBC você pode sincronizar seus dados mysql em elasticsearch.

Estou a usar o ubuntu 14.04 LTS e você vai precisar de instalar o Java8 para executar a pesquisa elastica como está escrito em Java

A seguir estão os passos para instalar ElasticSearch 2.2.0 e ElasticSearch-jdbc 2.2.0 e por favor note ambas as versões têm de ser iguais.

Depois de instalar o Java8 ..... instalar a elasticsearch 2.2.0 como se segue

# 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 procedimento de instalação irá instalar a pesquisa elastica em / usr/share/ elasticsearch /cujos ficheiros de configuração serão colocados em/etc / elasticsearch .

Agora vamos fazer alguma configuração básica no ficheiro de configuração. aqui /etc/elasticsearch / elasticsearch.o yml é o nosso ficheiro de configuração você pode abrir o arquivo para mudar por

nano /etc/elasticsearch/elasticsearch.yml

E mudar o nome do grupo e o nome do nó

Por exemplo:

# ---------------------------------- 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
Agora salve o arquivo e inicie a pesquisa elastica
 /etc/init.d/elasticsearch start

Para testar os ES instalados ou não executados após

 curl -XGET 'http://localhost:9200/?pretty'

Se conseguir seguir a sua pesquisa elastica está instalada agora:)

{
  "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"
}
Agora vamos instalar a pesquisa elastica-JDBC

Telecarregá-lo de http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip e extrair o mesmo em/etc/ elasticsearch / e criar "logs" pasta também lá ( path de Toros devem ser/etc/elasticsearch / logs)

Eu tenho uma base de dados criada no mysql com o nome "Elasticsearch Database" e dentro dessa tabela chamada "test" com campos id, nome e E-mail

cd /etc/elasticsearch

E correr a seguir

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"

Verifique agora se os dados de mysql importados em ES ou não

curl -XGET http://localhost:9200/users/_search/?pretty

Se tudo correr bem, você será capaz de ver todos os seus dados mysql no formato json e se houver algum erro nisso, poderás vê - los em: /etc/elasticsearch/logs / jdbc.ficheiro de Registo

Atenção :

Em versões mais antigas de ES ... plugin Elasticsearch-river-jdbc foi usado que é completamente desactualizado na versão mais recente, por isso não o use.

Espero poder poupar-te tempo.

Quaisquer outros pensamentos são apreciados

Url de Referência : https://github.com/jprante/elasticsearch-jdbc

 31
Author: Yaxita Shah, 2016-08-01 02:02:45

O plugin JDBC de Registo fará o trabalho:

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
Author: Ijaz Khan, 2018-02-20 11:15:01

Para torná-lo mais simples, criei uma classe PHP para configurar o MySQL com Elasticsearch. Usando a minha classe você pode sincronizar os seus dados MySQL na elasticsearch e também realizar pesquisa de texto completo. Você só precisa definir sua consulta SQL e classe fará o resto para você.

 1
Author: Ahmed Khan, 2017-01-03 10:55:28

O cliente oficial da Elasticsearch php pode ser encontrado em:

Https://github.com/elastic/elasticsearch-php

Se quiser mais informação sobre a pesquisa elastica no PHP, leia bem:

Https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html

 -2
Author: Arno, 2016-03-22 10:49:54