3分钟快速了解mysql数据导入到es
可以将 MySQL 中的表数据导入 Elasticsearch 中,并使用中文分词器。在这个例子中,我们将使用 Logstash(一个数据处理管道工具)将 MySQL 中的数据导入 Elasticsearch。假设您已经安装了 Elasticsearch、Logstash 和 MySQL。
- 首先,为了使用中文分词器,您需要安装一个 Elasticsearch 插件,如
analysis-ik
。在 Elasticsearch 安装目录下执行以下命令来安装该插件:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.0/elasticsearch-analysis-ik-7.15.0.zip
-
重启 Elasticsearch 以使插件生效。
-
在 Elasticsearch 中创建一个索引,使用中文分词器:
curl -X PUT "localhost:9200/books?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart": {
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_smart"
},
"author": { "type": "keyword" },
"publish_date": { "type": "date" },
"category": { "type": "keyword" }
}
}
}'
- 在 MySQL 数据库中创建一个名为
books
的表,并插入一些书籍数据:
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
author VARCHAR(255),
publish_date DATE,
category VARCHAR(255)
);
INSERT INTO books (title, author, publish_date, category)
VALUES
('活着', '余华', '1992-01-01', '小说'),
('百年孤独', '加西亚·马尔克斯', '1967-05-30', '小说'),
('人类简史', '尤瓦尔·赫拉利', '2011-01-01', '历史');
- 在 Logstash 安装目录下,创建一个名为
mysql_to_es.conf
的配置文件,内容如下:
input {
jdbc {
jdbc_driver_library => "/path/to/mysql-connector-java.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC"
jdbc_user => "your_username"
jdbc_password => "your_password"
schedule => "* * * * *"
statement => "SELECT * FROM books"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "books"
document_id => "%{id}"
}
}
请替换 /path/to/mysql-connector-java.jar
为 MySQL JDBC 驱动的路径,your_database
为您的数据库名,your_username
和 your_password
为您的 MySQL 用户名和密码。
- 使用 Logstash 运行刚刚创建的配置文件:
./bin/logstash -f mysql_to_es.conf
- 查看 Elasticsearch 中的数据是否正确导入:
curl -X GET "localhost:9200/books/_search?pretty"
您应该会看到包含导入的书籍数据的 JSON 响应。
在这个例子中,我们使用了 Logstash 将 MySQL 中的数据导入到 Elasticsearch 中,并使用中文分词器对 title 字段进行了分词。注意,在生产环境中,您需要谨慎处理敏感数据,并遵循适当的数据保护措施。
可以在运行中的 MySQL 服务上执行数据导入操作。Logstash 将会建立与 MySQL 数据库的连接,并从中读取数据,不会影响 MySQL 的正常运行。但是,如果您在 MySQL 表上执行写操作(如插入、更新、删除),则需要确保 Logstash 配置文件中的查询语句不会受到影响,否则可能导致数据不一致。