Подтвердить что ты не робот

ElasticSearch, как интегрироваться с Mysql

В одном из моих проектов я планирую использовать ElasticSearch с mysql. Я успешно установил ElasticSearch. Я могу управлять индексом в ES отдельно. но я не знаю, как реализовать то же самое с mysql.

Я прочитал пару документов, но я немного смущен и не имею четкой идеи. кто-нибудь может помочь мне?

Спасибо заранее.

4b9b3361

Ответ 1

Наконец, я смог найти ответ. разделяя мои результаты.

Чтобы использовать ElasticSearch с Mysql, вам понадобится импортер Java Database Connection (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

и смените имя кластера и node name

Например:

# ---------------------------------- 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" с именами полей, именем и электронной почтой

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

Если все пойдет хорошо, вы сможете увидеть все ваши данные mysql в формате json и если есть какая-либо ошибка, вы сможете увидеть их в файле /etc/elasticsearch/logs/jdbc.log

Предостережение:

В старых версиях ES... был использован плагин Elasticsearch-river-jdbc, который полностью устарел в последней версии, поэтому не используйте его.

Надеюсь, я смогу сэкономить ваше время:)

Любые дальнейшие мысли оценены

Ссылка URL: https://github.com/jprante/elasticsearch-jdbc

Ответ 2

Как и в ES 5.x, они предоставили эту функцию из коробки с logstash плагином.

Это будет периодически импортировать данные из базы данных и нажимать на сервер ES.

Нужно создать простой файл импорта, приведенный ниже (который также описан здесь) и использовать logstash для запуска script. Logstash поддерживает запуск этого script по расписанию.

# 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 при выполнении этого script, они будут созданы автоматически. Так же, как обычный почтовый вызов elasticsearch

Ответ 3

Плагин JDBC logstash сделает работу:

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}"
  }
}

Ответ 4

Чтобы сделать его более простым, я создал класс PHP для установки MySQL с Elasticsearch. Используя мой класс, вы можете синхронизировать свои данные MySQL в elasticsearch, а также выполнять полнотекстовый поиск. Вам просто нужно установить SQL-запрос, и класс сделает все для вас.

Ответ 5

В 2018 году вы можете использовать "инструмент эластичной миграции данных L4"

Лучший способ перехода с MySQL на Elastic: инструмент миграции данных L4: https://gnh1201.wordpress.com/2018/10/09/l4-data-migration-tool-mysql-to-elastic/

Во многих случаях он пытается перенести данные из реляционной базы данных в REST API или в очередь сообщений или JDBC.

Однако, после трех лет использования упругого поиска, я понял, что это глупый путь.

Мне нужен был другой способ. Приведенная выше ссылка поможет.