elasticsearch

ElasticSearch

Elasticsearch 存储数据的格式是以 JSON 格式为基础的结构。每个文档(document)都是一个 JSON 对象,包含了字段(field)和对应的值。在 Elasticsearch 中,多个文档组成一个索引(index),而每个索引可以包含多种类型的文档。

在 Elasticsearch 中,数据的存储格式如下所示:

  1. 索引(Index):类似于数据库中的表,用于存储一组相关的文档。
  2. 类型(Type):在 Elasticsearch 6.x 及以上版本中,一个索引只能包含一个类型。类型用于对文档进行分类,但在将来的版本中可能会被废弃。
  3. 文档(Document):每个文档都是一个 JSON 对象,包含了字段和对应的值。
  4. 字段(Field):文档中的属性,类似于数据库表中的列。
  5. 值(Value):字段对应的具体数值或文本。

总的来说,Elasticsearch 中的数据结构是基于 JSON 格式的文档存储,每个文档可以包含不同的字段和值,而这些文档组成了索引,用于快速检索和分析数据。

案例

利用LogStash 将Mysql数据批量导入到ES

要将 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支持Mysql数据导到ES 的增量更新

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