仅追加索引
仅追加索引是不可变索引,它只允许文档摄入(追加),同时阻止初始文档创建后的所有更新或删除操作。当您为索引启用仅追加设置时,OpenSearch 会阻止对现有文档的任何修改。您只能向索引添加新文档。
当您将索引配置为仅追加时,以下操作将返回错误:
- 文档更新调用(Update API)
- 文档删除调用(Delete API)
- 按查询更新调用
- 按查询删除调用
- 使用更新、删除或 upsert 操作进行的批量 API 调用
- 包含带有自定义文档 ID 的索引操作的批量 API 调用
优势
仅追加索引提供以下几个优势:
- 通过消除昂贵的更新和删除操作来优化性能
- 通过消除软删除和版本跟踪来优化存储和分段合并
- 支持未来的优化,如自动滚动更新和高效的温数据分层
仅追加索引非常适合不可变工作负载,例如包含日志、指标、可观测性或安全事件数据的工作负载,这些数据一旦摄入就不会被修改。
创建仅追加索引
以下请求创建一个名为 my-append-only-index
且所有更新都已禁用的新索引:
PUT /my-append-only-index
{
"settings": {
"index.append_only.enabled": true
}
}
索引一旦设置为仅追加,就不能更改为其他索引类型。
要将现有索引中的数据追加到新的仅追加索引中,请使用 Reindex API。由于仅追加索引不支持自定义文档 ID,您需要将源索引的 ctx._id
设置为 null
。这允许通过重新索引添加文档。
以下示例将文档从源索引 (my-source-index
) 重新索引到新的仅追加索引中:
POST /_reindex
{
"source": {
"index": "my-source-index"
},
"dest": {
"index": "my-append-only-index"
},
"script": {
"source": "ctx._id = null",
"lang": "painless"
}
}