Elasticsearch数据流(Data Stream)使用指南
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
数据流概述
数据流(Data Stream)是Elasticsearch中一种特殊的数据结构,专为时间序列数据设计。它由多个隐藏的索引(称为后备索引)组成,这些索引按时间顺序排列,形成一个逻辑上的连续数据流。数据流简化了时间序列数据的管理,自动处理索引的生命周期,非常适合日志、指标等时序数据的存储和分析。
数据流的基本操作
添加文档到数据流
向数据流添加文档有两种主要方式:
- 单文档添加:
POST /my-data-stream/_doc/
{
"@timestamp": "2099-03-08T11:06:07.000Z",
"user": {
"id": "8a4f500d"
},
"message": "Login successful"
}
- 批量添加:
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)操作会创建新的后备索引,有两种方式:
- 立即滚动:
POST /my-data-stream/_rollover/
- 延迟滚动(在下次写入时触发):
POST /my-data-stream/_rollover?lazy
延迟滚动适合不常更新的数据流,避免产生空的后备索引。
管理后备索引状态
关闭的后备索引无法被搜索或修改。要重新打开:
- 打开特定后备索引:
POST /.ds-my-data-stream-2099.03.07-000001/_open/
- 打开数据流所有后备索引:
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"
}
}
}
直接操作后备索引中的文档
有时需要直接操作特定后备索引中的文档,步骤如下:
- 首先查询获取文档信息:
GET /my-data-stream/_search
{
"seq_no_primary_term": true,
"query": {
"match": {
"user.id": "yWIumJd7"
}
}
}
- 根据返回的信息更新文档:
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"
}
- 或删除文档:
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
。
最佳实践
- 时间戳字段:确保所有文档都包含有效的
@timestamp
字段 - 批量操作:对于大量数据,优先使用批量API
- 滚动策略:根据数据量设置适当的滚动条件
- 查询优化:利用数据流的时间特性优化查询性能
- 监控:定期检查数据流统计信息
数据流为时序数据提供了高效、自动化的管理方案,合理使用可以显著简化运维工作并提高查询效率。
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考