配置
有几种方法可以配置库的连接。最简单也是最实用的方法是定义一个默认连接,每次进行 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)
其他关键字参数(在我们的示例中为 hosts
和 timeout
)将传递给来自 elasticsearch-py
的 Elasticsearch
类。
要查看所有可能的配置选项,请参阅 文档。
多个集群
您可以使用 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
时自动调用。