elasticsearch
Elasticsearch 存储数据的格式是以 JSON 格式为基础的结构。每个文档(document)都是一个 JSON 对象,包含了字段(field)和对应的值。在 Elasticsearch 中,多个文档组成一个索引(index),而每个索引可以包含多种类型的文档。
在 Elasticsearch 中,数据的存储格式如下所示:
- 索引(Index):类似于数据库中的表,用于存储一组相关的文档。
- 类型(Type):在 Elasticsearch 6.x 及以上版本中,一个索引只能包含一个类型。类型用于对文档进行分类,但在将来的版本中可能会被废弃。
- 文档(Document):每个文档都是一个 JSON 对象,包含了字段和对应的值。
- 字段(Field):文档中的属性,类似于数据库表中的列。
- 值(Value):字段对应的具体数值或文本。
总的来说,Elasticsearch 中的数据结构是基于 JSON 格式的文档存储,每个文档可以包含不同的字段和值,而这些文档组成了索引,用于快速检索和分析数据。
要将 MySQL 中的表 article 加入到 Elasticsearch 中,并对其中的 content、comment 和 date 进行全文索引,一种常见的方法是使用 Logstash。Logstash 是 Elastic Stack 中的一个组件,用于数据收集、转换和传输。通过 Logstash,你可以轻松地将 MySQL 中的数据导入到 Elasticsearch 中,并进行必要的数据转换和索引设置。
以下是一个简单的示例配置文件,用于将 MySQL 表 article 中的数据导入到 Elasticsearch:
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"
jdbc_user => "your_username"
jdbc_password => "your_password"
statement => "SELECT id, content, comment, date FROM article"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "articles"
document_id => "%{id}"
}
}
在这个配置文件中:
input
部分使用 JDBC 插件连接到 MySQL 数据库,并执行 SQL 查询来获取 article 表中的数据。output
部分将获取的数据发送到 Elasticsearch 中的 index “articles” 中,并指定了文档的 id 为数据库表中的 id 字段。
要运行这个配置文件,你需要安装和配置 Logstash,并确保 MySQL 数据库和 Elasticsearch 服务正常运行。执行以下命令来启动 Logstash 并运行配置文件:
bin/logstash -f your_config_file.conf
通过这种方式,你可以将 MySQL 中的数据导入到 Elasticsearch 中,并对 content、comment 和 date 字段进行全文索引。Logstash 提供了丰富的插件和配置选项,可以帮助简化数据导入和转换的工作。
Logstash 提供了一个名为 JDBC Input 插件,可以实现监控 MySQL 数据库中数据变化并将新数据实时索引到 Elasticsearch 中的功能。这个功能通常称为 Incremental Data Import(增量数据导入)。
通过配置 Logstash 的 JDBC Input 插件,并使用 schedule
参数来定时执行 SQL 查询,Logstash 可以定期轮询 MySQL 数据库,检测新的数据变化,并将新数据索引到 Elasticsearch 中。这样就实现了自动感知 MySQL 数据变化并实时更新 Elasticsearch 索引的功能。
以下是一个简单的示例配置文件,演示如何使用 Logstash 实现增量数据导入:
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"
jdbc_user => "your_username"
jdbc_password => "your_password"
statement => "SELECT id, content, comment, date FROM article WHERE date > :sql_last_value"
use_column_value => true
tracking_column => "date"
schedule => "* * * * *"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "articles"
document_id => "%{id}"
}
}
在这个配置文件中:
statement
参数中的:sql_last_value
变量表示上一次查询的最后一个值,用于实现增量查询。tracking_column
参数指定了用于跟踪数据变化的列,这里使用了 “date” 字段。schedule
参数用于设置定时执行查询的时间间隔,这里表示每分钟执行一次查询。
通过这样的配置,Logstash 将定期检测 MySQL 数据库中 “date” 字段的变化,将新数据索引到 Elasticsearch 中,实现了自动感知数据变化并实时更新索引的功能。。
https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html