【问题标题】:Can't close ElasticSearch index on AWS?无法关闭 AWS 上的 ElasticSearch 索引?
【发布时间】:2016-01-11 20:02:49
【问题描述】:

我创建了一个新的 AWS ElasticSearch 域,用于测试。我现在在不同的主机上使用 ES,我希望迁移到 AWS。

我需要做的一件事是在我的实例上设置映射(分析器)。为此,我需要“关闭”索引,否则 ES 只会引发异常。

不过,每当我尝试关闭索引时,都会从 AWS 收到异常:

Your request: '/_all/_close' is not allowed by CloudSearch.

AWS ES documentation 明确表示在某些情况下要这样做:

 curl -XPOST 'http://search-weblogs-abcdefghijklmnojiu.us-east-1.a9.com/_all/_close'

我没有找到任何说明为什么我无法在 AWS ES 上关闭我的索引的文档,也没有找到其他有此问题的人。

我有一个 ElasticSearch 域也有点奇怪,但它给了我一个 CloudSearch 错误消息,因为我认为这些是不同的服务,尽管我认为一个是根据另一个来实现的。

谢谢!

【问题讨论】:

  • 很好的发现,您是否就这个问题直接联系了 AWS?
  • BMW:我在尝试向他们的论坛发帖时也遇到了一个(甚至更普遍的)错误。 :P

标签: amazon-web-services elasticsearch


【解决方案1】:

AWS Elasticsearch 不支持对索引的“关闭”操作。

http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html

“目前,Amazon ES 不支持 Elasticsearch _close API”

【讨论】:

  • 是的,他们更改了文档。我猜他们的文档和实施团队实际上并没有互相交谈。更奇怪的是,文档历史中没有关于这种变化的记录。
  • 如果你想添加映射,你必须重新索引。有一些关于使用别名来做到这一点的好文章。基本步骤 - 创建读取别名和写入别名。将读取别名指向当前索引。使用新映射创建新索引。将写入别名指向新索引。然后将旧索引复制到新索引(从读取别名读取,写入写入别名)。这涉及修改现有代码以改用别名。 elastic.co/guide/en/elasticsearch/guide/current/reindex.htmlelastic.co/guide/en/elasticsearch/reference/current/…
  • 可以确认,从这个答案开始 4 年后,AWS Elasticsearch 仍然不支持_close(至少在我昨天创建的 6.0 实例上不支持),但上面不再提到它链接的文档。我们成功地使用 reindex 来更新映射。
【解决方案2】:

根据我最近找到的 AWS 文档,您必须先将您的弹性搜索域升级到 7.4 或更高版本。

https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-handling-errors.html#aes-troubleshooting-close-api

【讨论】:

    【解决方案3】:

    由于一次关闭所有索引是一项危险的操作,因此默认情况下它可能在您的集群上被禁用。您需要确保您的 elasticsearch.yml 配置文件不包含以下内容:

    action.destructive_requires_name: true
    

    您可以在配置文件中进行设置并重新启动集群,但我强烈建议您不要这样做,因为这为各种其他破坏性操作打开了大门,例如一次删除所有索引.

    action.destructive_requires_name: false
    

    您应该做的是临时使用

    更新集群设置
    curl -XPUT localhost:9200/_cluster/settings -d '{
        "persistent" : {
            "action.destructive_requires_name" : false
        }
    }'
    

    然后关闭所有索引

    curl -XPOST localhost:9200/_all/_close
    

    然后将设置重置为更安全的值:

    curl -XPUT localhost:9200/_cluster/settings -d '{
        "persistent" : {
            "action.destructive_requires_name" : true
        }
    }'
    

    【讨论】:

    • AWS ES 是更高级别的服务,不提供对elasticsearch.yml 的直接访问。当我尝试像这样 PUT 到 /_cluster/settings 时出现“不允许有效负载”错误。
    • 您是否至少能够使用/your_index/_close 关闭单个索引?
    • 你的回答给了我一个想法。我正在从我的客户端库中执行.close(index=INDEX_NAME),但由于某种原因,它似乎以/_all/_close 的形式出现在了网上。所以我尝试了curl -XPOST host/my_index/_close,AWS 报告说这也是“CloudSearch 不允许的”。该死。
    • 你能运行这个:curl -XGET host/_cluster/settings 吗?因为这似乎是允许的。
    • 不过,AWS Cloudsearch 与 AWS Elasticsearch 不同。你确定你打的是正确的主机吗?这是我看到的唯一解释。
    猜你喜欢
    • 2018-12-10
    • 2020-12-29
    • 1970-01-01
    • 2016-07-19
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多