【问题标题】:Programatically setting the read_only_allow_delete property of an index以编程方式设置索引的 read_only_allow_delete 属性
【发布时间】:2019-03-22 11:00:35
【问题描述】:

我正在尝试执行以下行,但它抛出了一个错误(我应该通过运行相同的代码来避免):

   es.indices.put_settings(index="demo_index", body={
        "blocks": {
            "read_only_allow_delete": "false"
        }
    })

错误:elasticsearch.exceptions.AuthorizationException: AuthorizationException(403, 'cluster_block_exception', 'blocked by: [FORBIDDEN/12/index read-only/allow delete (api)];')

如果我使用 curl 触发相同的查询,它已成功执行并且我没有错误:

curl -XPUT 'localhost:9200/demo_index/_settings' -H 'Content-Type: application/json' -d '{ "index": { "blocks": { "read_only_allow_delete": "false" } } }'

我也尝试使用“null”而不是“false”,但我得到了相同的结果。有什么想法吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl elasticsearch-dsl-py


    【解决方案1】:

    我没有足够的声誉来添加评论,但是您是否尝试过将 body 参数与 index 包装起来以匹配 curl 命令?

    es.indices.put_settings(index="demo_index", body={
            "index": {
                "blocks": {
                    "read_only_allow_delete": "false"
                }
            }
        })
    

    【讨论】:

      【解决方案2】:

      使用新的 API,您可以通过以下方式实现:

      import elasticsearch
      
      def connect_elasticsearch():
          _es = None
          _es = elasticsearch.Elasticsearch([{'host': 'localhost', 'port': 9200}])
          if _es.ping():
              print('Yay Connect')
          else:
              print('Awww it could not connect!')
          return _es
      
      es = connect_elasticsearch()
      
      try:
          body = {"index.blocks.read_only_allow_delete": "false"}
          es_index_settings = es.indices.put_settings(index="demo_index",body=body)
      except elasticsearch.ElasticsearchException as exp:
          print(exp)
      

      【讨论】:

        猜你喜欢
        • 2013-04-15
        • 2012-08-20
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 2023-01-03
        • 1970-01-01
        相关资源
        最近更新 更多