Elasticsearch数据流(Data Stream)使用指南

Elasticsearch数据流(Data Stream)使用指南

elasticsearch elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch

数据流概述

数据流(Data Stream)是Elasticsearch中一种特殊的数据结构,专为时间序列数据设计。它由多个隐藏的索引(称为后备索引)组成,这些索引按时间顺序排列,形成一个逻辑上的连续数据流。数据流简化了时间序列数据的管理,自动处理索引的生命周期,非常适合日志、指标等时序数据的存储和分析。

数据流的基本操作

添加文档到数据流

向数据流添加文档有两种主要方式:

  1. 单文档添加
POST /my-data-stream/_doc/
{
  "@timestamp": "2099-03-08T11:06:07.000Z",
  "user": {
    "id": "8a4f500d"
  },
  "message": "Login successful"
}
  1. 批量添加
PUT /my-data-stream/_bulk?refresh
{"create":{ }}
{ "@timestamp": "2099-03-08T11:04:05.000Z", "user": { "id": "vlb44hny" }, "message": "Login attempt failed" }
{"create":{ }}
{ "@timestamp": "2099-03-08T11:06:07.000Z", "user": { "id": "8a4f500d" }, "message": "Login successful" }

注意事项

  • 必须包含@timestamp字段
  • 只能使用create操作类型
  • 指定文档ID时需使用_create而非_doc端点

查询数据流

数据流支持所有标准搜索API:

  • 普通搜索
  • 异步搜索
  • 多搜索
  • 字段能力查询
  • EQL搜索

查询语法与普通索引相同,但会搜索数据流中的所有后备索引。

数据流管理

获取数据流统计信息

GET /_data_stream/my-data-stream/_stats?human=true

此API返回数据流的详细统计信息,包括文档数量、存储大小等。

手动滚动数据流

滚动(Rollover)操作会创建新的后备索引,有两种方式:

  1. 立即滚动:
POST /my-data-stream/_rollover/
  1. 延迟滚动(在下次写入时触发):
POST /my-data-stream/_rollover?lazy

延迟滚动适合不常更新的数据流,避免产生空的后备索引。

管理后备索引状态

关闭的后备索引无法被搜索或修改。要重新打开:

  1. 打开特定后备索引:
POST /.ds-my-data-stream-2099.03.07-000001/_open/
  1. 打开数据流所有后备索引:
POST /my-data-stream/_open/

数据修改操作

按查询更新文档

POST /my-data-stream/_update_by_query
{
  "query": {
    "match": {
      "user.id": "l7gk7f82"
    }
  },
  "script": {
    "source": "ctx._source.user.id = params.new_id",
    "params": {
      "new_id": "XgdX0NoX"
    }
  }
}

按查询删除文档

POST /my-data-stream/_delete_by_query
{
  "query": {
    "match": {
      "user.id": "vlb44hny"
    }
  }
}

直接操作后备索引中的文档

有时需要直接操作特定后备索引中的文档,步骤如下:

  1. 首先查询获取文档信息:
GET /my-data-stream/_search
{
  "seq_no_primary_term": true,
  "query": {
    "match": {
      "user.id": "yWIumJd7"
    }
  }
}
  1. 根据返回的信息更新文档:
PUT /.ds-my-data-stream-2099-03-08-000003/_doc/bfspvnIBr7VVZlfp2lqX?if_seq_no=0&if_primary_term=1
{
  "@timestamp": "2099-03-08T11:06:07.000Z",
  "user": {
    "id": "8a4f500d"
  },
  "message": "Login successful"
}
  1. 或删除文档:
DELETE /.ds-my-data-stream-2099.03.08-000003/_doc/bfspvnIBr7VVZlfp2lqX

数据迁移

从其他索引迁移到数据流

使用reindex API将数据从现有索引迁移到数据流:

POST /_reindex
{
  "source": {
    "index": "archive"
  },
  "dest": {
    "index": "my-data-stream",
    "op_type": "create"
  }
}

注意:由于数据流是仅追加的,必须使用op_type: create

最佳实践

  1. 时间戳字段:确保所有文档都包含有效的@timestamp字段
  2. 批量操作:对于大量数据,优先使用批量API
  3. 滚动策略:根据数据量设置适当的滚动条件
  4. 查询优化:利用数据流的时间特性优化查询性能
  5. 监控:定期检查数据流统计信息

数据流为时序数据提供了高效、自动化的管理方案,合理使用可以显著简化运维工作并提高查询效率。

elasticsearch elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹卿雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值