我的Ruby / Sinatra应用程序使用elasticsearch-ruby gem连接到AWS ES集群,以索引用户可以搜索的授权(通过使用其用户ID建立索引)的文本文档。现在,我想将文档从一个索引复制到另一个索引,以便由不同的授权用户查询文档。我按照文档on this file尝试了_reindex端点只是为了得到以下错误:
Elasticsearch :: Transport :: Transport :: Errors :: Unauthorized - [401] {" Message":"您的请求:' / _ reindex'是不允许的。"}:
谷歌搜索,我偶然发现了一个亚马逊文档页面,其中列出了他们的API上所有支持的操作,并且由于一些扭曲的原因_reindex还没有。这是为什么?更重要的是, 如何有效地解决这个问题并实现我想做的事情?
答案 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"
}
}
'''