ElasticSearch Python索引和别名创建

时间:2017-10-24 19:22:34

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

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

我使用库提供的Document ViewModel通过基类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我发送给它的任何请求。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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

事实证明,弹性dsl在此时内部“太混乱”,因为他们可以使用别名进行正确的配置。他们建议,既然消费者拥有所有部分,请手动构建结构,而不是让public class PasswordAdapter extends XmlAdapter<String, String> { @Override public String unmarshal(String v) throws Exception { return v; } @Override public String marshal(String v) throws Exception { return "***"; } } 为你构建它。