【问题标题】:ElasticSearch Python Index and Alias CreationElasticSearch Python 索引和别名创建
【发布时间】:2024-05-21 07:00:01
【问题描述】:

我正在使用 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.create() 之前检查了index.exists()。如果我清除其数据的 ElasticSearch 实例,服务器就会崩溃并响应400 Bad Request 对我发送给它的任何请求。

我在这里做错了什么?

【问题讨论】:

    标签: python python-3.x elasticsearch elasticsearch-dsl


    【解决方案1】:

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

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

    事实证明,此时弹性 dsl 在内部变得“过于混乱”,以至于他们无法使用别名进行正确的配置。他们建议,由于消费者拥有所有部件,因此请手动构建结构,而不是让 DocType.init() 为您构建它。

    【讨论】: