【问题标题】:How to reindex AWS Elasticsearch?如何重新索引 AWS Elasticsearch?
【发布时间】:2017-01-25 08:08:13
【问题描述】:

我的 Ruby/Sinatra 应用程序使用 elasticsearch-ruby gem 连接到 AWS ES 集群,以索引授权(通过使用其用户 ID 进行索引)用户可以搜索的文本文档。现在,我想将文档从一个索引复制到另一个索引,以使其他授权用户可以查询文档。我尝试了 on this file 记录的 _reindex 端点,只是得到以下错误:

Elasticsearch::Transport::Transport::Errors::Unauthorized - [401] {"Message":"Your request: '/_reindex' is not allowed."}:

谷歌搜索,我偶然发现了一个亚马逊文档页面,其中列出了他们的 API 上所有支持的操作,但出于某种扭曲的原因,_reindex 还没有。这是为什么?更重要的是, 我如何有效地解决这个问题并实现我想做的事情?

【问题讨论】:

    标签: ruby amazon-web-services elasticsearch


    【解决方案1】:

    您应该仔细检查 AWS ES 部署的 Elasticsearch 版本。我相信_reindex API 在version 2.2 中可用。您可以通过使用 curl 获取 ES 根 ip 和端口来检查版本号,例如并检查 version.number。

    要解决没有_reindex 端点的问题,我建议您自己实现它。这还不错。您可以use a scroll 遍历所有要重新索引的文档。如果是整个索引,您可以使用带有滚动条的 matchall 查询。然后,您可以根据需要操作文档,或者简单地使用the bulk api 将文档发布(即重新索引)到新索引。

    确保提前使用您想要的映射模板创建了新索引。

    上述过程最适合重新索引大量文档;如果您只想移动几个或一个(听起来像您这样做)。通过 id 和 submit it 将文档从现有索引中抓取到您的第二个索引。

    【讨论】:

      【解决方案2】:

      AWS Elasticsearch 现在支持远程重新索引,请查看此文档: https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/remote-reindex.html

      以下示例: '''

      POST <local-domain-endpoint>/_reindex
      {
        "source": {
          "remote": {
            "host": "https://remote-domain-endpoint:443"
          },
          "index": "remote_index"
        },
        "dest": {
          "index": "local_index"
        }
      }
      

      '''

      【讨论】:

      • 该链接有几个示例,它很简单,不需要像标准 Elasticsearch 要求的那样将任何 URL 列入白名单。
      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 2020-06-02
      • 1970-01-01
      • 2021-11-30
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多