配置

有几种方法可以配置库的连接。最简单也是最实用的方法是定义一个默认连接,每次进行 API 调用时都可以使用它,而无需显式传递其他连接。

注意

除非您想从应用程序访问多个集群,否则强烈建议您使用 create_connection 方法,所有操作将自动使用该连接。

默认连接

要定义一个可以在全局范围内使用的默认连接,请使用 connections 模块和 create_connection 方法,如下所示

from elasticsearch_dsl import connections

connections.create_connection(hosts=['localhost'], timeout=20)

带有别名的单个连接

您可以定义 alias 或连接的名称,以便您以后可以轻松地引用它。 alias 的默认值为 default

from elasticsearch_dsl import connections

connections.create_connection(alias='my_new_connection', hosts=['localhost'], timeout=60)

其他关键字参数(在我们的示例中为 hoststimeout)将传递给来自 elasticsearch-pyElasticsearch 类。

要查看所有可能的配置选项,请参阅 文档

多个集群

您可以使用 configure 方法同时定义多个连接到多个集群。

from elasticsearch_dsl import connections

connections.configure(
    default={'hosts': 'localhost'},
    dev={
        'hosts': ['esdev1.example.com:9200'],
        'sniff_on_start': True
    }
)

这些连接将在首次请求时延迟构建。

您也可以通过逐个添加连接来定义多个连接,如以下示例所示

# if you have configuration options to be passed to Elasticsearch.__init__
# this also shows creating a connection with the alias 'qa'
connections.create_connection('qa', hosts=['esqa1.example.com'], sniff_on_start=True)

# if you already have an Elasticsearch instance ready
connections.add_connection('another_qa', my_client)

使用别名

当使用多个连接时,您可以使用创建连接时指定的字符串别名来引用它们。

此示例展示了如何使用连接的别名

s = Search(using='qa')

如果该别名没有注册连接,则会引发 KeyError

手动

如果您不想提供全局配置,您始终可以将自己的连接作为 elasticsearch.Elasticsearch 的实例传递,并使用参数 using,无论它在何处被接受,如下所示

s = Search(using=Elasticsearch('localhost'))

您甚至可以使用这种方法来覆盖对象可能已经关联的任何连接

s = s.using(Elasticsearch('otherhost:9200'))

注意

当使用 elasticsearch_dsl 时,强烈建议您使用内置序列化器(elasticsearch_dsl.serializer.serializer)以确保您的对象每次都正确序列化为 JSON。此处描述的 create_connection 方法(以及 configure 方法在幕后使用的该方法)会自动为您执行此操作,除非您显式指定自己的序列化器。内置序列化器还允许您序列化自己的对象 - 只需在您的对象上定义一个 to_dict() 方法,该方法将在将您的自定义对象序列化为 JSON 时自动调用。