ruby - 如何重新索引 AWS Elasticsearch?

标签 ruby amazon-web-services elasticsearch

我的 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/

相关文章:

ruby-on-rails - rake 任务中的 def block

amazon-web-services - AWS cloudformation elasticsearch 静态加密(KMS 加密)

windows - 如何让 AWS 命令​​行界面在 cygwin 中工作

elasticsearch - Elasticsearch不在术语查询中搜索字段

php - laravel 6 + elasticsearch-php 7.6 + xampp : No alive nodes found in your cluster

ruby - 使用变量的当前值创建 Proc

ruby-on-rails - 在 RSpec 请求规范中 stub Controller 操作

python - ElasticSearch 字段提升

ruby-on-rails - 使用 AASM 的 ActiveRecord 模型上的 delayed_job - 吞下失败的方法错误,而是抛出 "wrong number of arguments"

java - Spring Integration - FTP 下载后立即发送消息