我的 Ruby/Sinatra 应用程序使用 elasticsearch-ruby gem 连接到 AWS ES 集群索引授权用户可以搜索的文本文档(通过使用用户 ID 进行索引)。现在,我想将一个文档从一个索引复制到另一个索引,以使另一个授权用户可以查询该文档。我尝试了记录的 _reindex 端点 on this file只会得到以下错误:
Elasticsearch::Transport::Transport::Errors::Unauthorized - [401] {"Message":"Your request: '/_reindex' is not allowed."}:
四处搜索,我无意中发现了一个 Amazon 文档页面,该页面列出了它们的 API 上所有支持的操作,但出于某种扭曲的原因,_reindex 还不存在。这是为什么?更重要的是, 我如何有效地解决这个问题并实现我想做的事情?
最佳答案
您应该仔细检查 AWS ES 部署的 Elasticsearch 版本。 _reindex
API 在 version 2.2 中可用我相信。您可以通过使用 curl 获取 ES 根 ip 和端口来检查版本号,例如并检查版本号。
要解决没有 _reindex
端点的问题,我建议您自己实现它。这还不错。你可以use a scroll遍历所有要重建索引的文档。如果它是整个索引,您可以使用带有滚动的 matchall 查询。然后您可以根据需要操作文档或简单地使用 the bulk api将文档发布(即重新索引)到新索引。
确保已提前使用所需的映射模板创建新索引。
上面的这个过程最适合重新索引大量文档;如果您只想移动几个或一个(听起来像您这样做)。通过 id 和 submit it 从其现有索引中获取文档到你的第二个索引。
关于ruby - 如何重新索引 AWS Elasticsearch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542605/