私のプロジェクトの 1 つで、MySQL で ElasticSearch を使用する予定です。ElasticSearch のインストールに成功しました。ES で個別にインデックスを管理できます。しかし、MySQL で同じことを実装する方法がわかりません。
いくつかのドキュメントを読みましたが、少し混乱しており、明確な考えがありません。
私のプロジェクトの 1 つで、MySQL で ElasticSearch を使用する予定です。ElasticSearch のインストールに成功しました。ES で個別にインデックスを管理できます。しかし、MySQL で同じことを実装する方法がわかりません。
いくつかのドキュメントを読みましたが、少し混乱しており、明確な考えがありません。
ES 5.x の時点で、logstashプラグインを使用してこの機能をすぐに使用できるようにしています。
これにより、データベースから定期的にデータがインポートされ、ES サーバーにプッシュされます。
以下に示す単純なインポート ファイルを作成し (これについてはこちらでも説明しています)、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 hereからダウンロードできます。
このスクリプトの実行時に ES にインデックスが存在しない場合は、自動的に作成されます。Elasticsearch への通常の post 呼び出しと同じように
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}"
}
}