以下是 Elasticsearch 导入不同类型数据的实现方式,以及每种方式的示例代码和解释:
通过 Elasticsearch 的 API,你可以直接将 JSON 格式的文档导入到索引中。这是一种常见的导入方式,适用于各种结构化数据。
curl -XPOST "http://localhost:9200/my_index/_doc/1" -H "Content-Type: application/json" -d '{
  "title": "Sample Document",
  "content": "This is a sample document for demonstration."
}'
解释:上述示例中,我们使用 cURL 发起一个 POST 请求,将一个 JSON 文档导入到名为 my_index 的索引中。文档的内容包括 title 和 content 字段。
Logstash 是一个用于数据采集、转换和传输的工具,它支持从各种数据源导入数据到 Elasticsearch。
示例配置文件 csv_to_es.conf :
input {
  file {
    path => "/path/to/your/csv/file.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter {
  csv {
    separator => ","
    columns => ["field1", "field2", "field3"]
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "csv_data"
  }
}
运行 Logstash 导入数据:
bin/logstash -f csv_to_es.conf
解释:在这个示例中,我们通过 Logstash 的配置文件从一个 CSV 文件中读取数据,将其解析为字段,并将数据导入到名为 csv_data 的索引中。
如果你有大量数据需要导入,使用 Elasticsearch 的 Bulk API 可以提高导入效率。
curl -XPOST "http://localhost:9200/my_index/_bulk" -H "Content-Type: application/json" -d '
{ "index": { "_id": "1" }}
{ "title": "Document 1", "content": "Content of document 1." }
{ "index": { "_id": "2" }}
{ "title": "Document 2", "content": "Content of document 2." }
'
解释:在上述示例中,我们通过发送包含多个操作的 JSON 到 _bulk 端点,实现了批量导入。每个操作指定了操作类型(例如 index ),以及相应文档的内容。
Elasticsearch JDBC river 插件可以用来从关系型数据库中导入数据到 Elasticsearch。
示例配置文件 jdbc.conf :
{
  "type": "jdbc",
  "jdbc": {
    "url": "jdbc:mysql://localhost:3306/my_database",
    "user": "username",
    "password": "password",
    "sql": "SELECT * FROM my_table",
    "index": "jdbc_data",
    "type": "jdbc_type"
  }
}
安装并启动 JDBC river 插件:
bin/plugin install jdbc
bin/elasticsearch
创建 JDBC river:
curl -XPUT "http://localhost:9200/_river/my_jdbc_river/_meta" -H "Content-Type: application/json" -d @jdbc.conf
解释:在这个示例中,我们通过 JDBC river 插件连接到 MySQL 数据库,执行 SQL 查询,并将结果导入到名为 jdbc_data 的索引中。
总之,Elasticsearch 支持多种导入数据的方式,包括直接使用 API、使用工具如 Logstash,以及插件如 JDBC river。选择适合你需求的方式,可以根据数据类型、数据量和性能需求来决定。