ElasticSearch как интегрировать с Mysql
в одном из моих проектов я планирую использовать ElasticSearch с mysql. Я успешно установил ElasticSearch. Я могу управлять индексом в ES отдельно. но я не знаю, как реализовать то же самое с mysql.
Я прочитал пару документов, но я немного смущен и не имею четкого представления. кто-нибудь может мне помочь?
спасибо заранее.
5 ответов
по состоянию на ES 5.x, они дали эту функцию из коробки с logstash плагин.
это будет периодически импортировать данные из базы данных и нажать на ES server.
нужно создать простой файл импорта, приведенный ниже (что тоже описано здесь) и используйте 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
вы можете скачать MySQL jar из maven здесь.
если индексы не существуют в ES при выполнении этого скрипта, они будут созданы автоматически. Так же, как обычный почтовый вызов elasticsearch
наконец-то я смог найти ответ. делюсь своими находками.
для использования ElasticSearch с Mysql вам потребуется подключение к базе данных Java (JDBC) импортера. с драйверами JDBC вы можете синхронизировать данные mysql в elasticsearch.
я использую ubuntu 14.04 LTS, и вам потребуется установить Java8 для запуска elasticsearch, как написано на Java
ниже приведены шаги для установки 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
эта процедура установки установит Elasticsearch в /usr/share/ elasticsearch/, файлы конфигурации которого будут помещены в/etc / 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)
у меня есть одна база данных, созданная в mysql, имеющая имя"ElasticSearchDatabase" а что внутри таблица с именем "test" с полями id, name и email
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"
теперь проверьте, импортированы ли данные mysql в ES или нет
curl -XGET http://localhost:9200/users/_search/?pretty
если все пойдет хорошо, вы сможете увидеть все ваши данные в формате JSON и если есть какая-либо ошибка, вы сможете увидеть их в /etc/elasticsearch/logs/jdbc.файл журнала
внимание :
в более старых версиях ES ... плагин 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}"
}
}
чтобы сделать его более простым, я создал класс PHP для установки MySQL с Elasticsearch. Используя мой класс, вы можете синхронизировать данные MySQL в elasticsearch, а также выполнять полнотекстовый поиск. Вам просто нужно установить SQL-запрос, и класс сделает все остальное за вас.
официальный клиент Elasticsearch php можно найти по адресу:
https://github.com/elastic/elasticsearch-php
Если вы хотите получить больше информации об Elasticsearch в PHP, это хорошее чтение:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html