ElasticSearch Python 索引和别名创建



我正在使用Python ElasticSearch DSL库与ElasticSearch集群进行交互。

我使用库通过基类elasticsearch_dsl.DocType提供的文档视图模型,并且以前使用 DocType.init() 创建索引:

import elasticsearch_dsl as dsl
class SomeDocument(dsl.DocType):
    class Meta:
        doc_type = some_document
        index = some_document
instance = SomeDocument()
instance.init()

但是现在我想在 Elastic 初始化时为这里创建的索引添加一个别名,并更改索引的分片数量。我想出的代码是:

import elasticsearch_dsl as dsl
class SomeDocument(dsl.DocType):
    class Meta:
        doc_type = some_document
        index = some_document
instance = SomeDocument()
doc_index = dsl.Index('some_document_v1')
doc_index.aliases(some_document={})
if not doc_index.exists():
    doc_index.create()

我希望SomeDocument ViewModel 对其请求使用some_document索引,尽管some_document现在是指向索引some_document_v1的别名。

当我尝试运行此代码时,我得到:

index some_document_v1 already exists

即使我在打电话之前检查index.exists() index.create().如果我清除 ElasticSearch 实例的数据,服务器就会崩溃并响应我发送给它的任何请求400 Bad Request

我在这里做错了什么?

在这里找到了我要找的东西:

https://github.com/elastic/elasticsearch-dsl-py/issues/600

事实证明,弹性dsl在这一点上在内部变得"太混乱",以至于他们无法使用别名进行正确的配置。他们建议,既然消费者拥有所有部分,请手动构建结构,而不是让DocType.init()为您构建结构。

最新更新