Link Search Menu Expand Document Documentation Menu

仅追加索引

仅追加索引是不可变索引,它只允许文档摄入(追加),同时阻止初始文档创建后的所有更新或删除操作。当您为索引启用仅追加设置时,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"
  }
}

剩余 350 字符

有问题?

想要贡献?