如何重新索引AWS Elasticsearch?

时间:2016-09-17 03:35:15

标签: ruby amazon-web-services elasticsearch

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

  

Elasticsearch :: Transport :: Transport :: Errors :: Unauthorized - [401] {" Message":"您的请求:' / _ reindex'是不允许的。"}:

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

2 个答案:

答案 0 :(得分:1)

您应该仔细检查AWS ES部署的Elasticsearch版本。我相信_reindex API在version 2.2中可用。您可以通过GETting ES root ip& amp来检查版本号。卷曲的端口,例如并检查version.number。

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

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

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

答案 1 :(得分:0)

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"
  }
}

'''