后端 ( Backends )
• 最后修改:2024-05-04 • 阅读量:51
Wagtailsearch 支持多个后端,让您可以选择使用数据库进行搜索或使用 Elasticsearch 等外部服务。
您可以通过 WAGTAILSEARCH_BACKENDS
设置来配置要使用的后端:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.database',
}
}
AUTO_UPDATE
默认情况下, Wagtail 会自动使所有索引保持最新。这可能会影响编辑内容时的性能,尤其是当您的索引托管在外部服务上时。
AUTO_UPDATE
设置允许您针对每个索引禁用此功能:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': ...,
'AUTO_UPDATE': False,
}
}
如果您禁用了自动更新,则必须定期运行 [update_index] 命令以使索引与数据库保持同步。
ATOMIC_REBUILD
警告:
由于 a bug in the handling of aliases ,此选项可能不适用于 Elasticsearch 版本 5.4.x - 请升级到 5.5 或更高版本。
默认情况下(使用 Elasticsearch 后端时),运行 update_index
命令时, Wagtail 会删除索引并从头开始重建。这会导致搜索引擎在重建完成之前不会返回结果,并且也存在风险,因为如果发生错误则无法回滚。
将 ATOMIC_REBUILD
设置为 True
会使 Wagtail 重建为单独的索引,同时保持旧索引处于活动状态,直到新索引完全构建。重建完成后,索引将自动交换,旧索引将被删除。
BACKEND
以下是 Wagtail 开箱即用支持的后端列表。
数据库后端(默认)
wagtail.search.backends.database
数据库搜索后端使用正在使用的数据库后端(例如PostgreSQL FTS、SQLite FTS5)的全文搜索功能来搜索数据库中的内容。该后端旨在用于开发,并且也应该足以在不需要任何 Elasticsearch 特定功能的网站上用于生产。
Elasticsearch Backend
支持 Elasticsearch 版本 5、6 、 7 和 8。使用适合您的版本的后端:
wagtail.search.backends.elasticsearch5
(Elasticsearch 5.x)wagtail.search.backends.elasticsearch6
(Elasticsearch 6.x)wagtail.search.backends.elasticsearch7
(Elasticsearch 7.x)wagtail.search.backends.elasticsearch8
(Elasticsearch 8.x)
先决条件是 Elasticsearch 服务本身以及通过 pip 的 elasticsearch-py 包。软件包的主要版本必须与已安装的 Elasticsearch 版本匹配:
pip install "elasticsearch>=5.0.0,<6.0.0" # 适用于 Elasticsearch 5.x
pip install "elasticsearch>=6.4.0,<7.0.0" # 适用于 Elasticsearch 6.x
pip install "elasticsearch>=7.0.0,<8.0.0" # 适用于 Elasticsearch 7.x
pip install "elasticsearch>=8.0.0,<9.0.0" # 适用于 Elasticsearch 8.x
警告:
Elasticsearch 客户端 library 版本 6.3.1 与 Wagtail 不兼容。使用6.4.0或更高版本。
后端在设置中配置:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch8',
'URLS': ['https://localhost:9200'],
'INDEX': 'wagtail',
'TIMEOUT': 5,
'OPTIONS': {},
'INDEX_SETTINGS': {},
}
}
除了 BACKEND
之外,这些键是可选的并且默认为所示值。 OPTIONS
中定义的任何键都会作为区分大小写的关键字参数直接传递给 Elasticsearch 构造函数(例如 'max_retries': 1
)。
可以选择将用户名和密码提供给 URL
字段,以为 Elasticsearch 服务提供身份验证凭据:
WAGTAILSEARCH_BACKENDS = {
'default': {
...
'URLS': ['https://username:password@localhost:9200'],
...
}
}
INDEX_SETTINGS
是一个字典,用于覆盖默认设置来创建索引。默认设置在模块 wagtail/wagtail/search/backends/elasticsearch7.py
的 ElasticsearchSearchBackend
类内定义。添加任何新键,任何现有键(如果不是字典)都将替换为新值。以下是有关如何配置分片数量并将 Italian LanguageAnalyzer 设置为默认分析器的示例:
WAGTAILSEARCH_BACKENDS = {
'default': {
...,
'INDEX_SETTINGS': {
'settings': {
'index': {
'number_of_shards': 1,
},
'analysis': {
'analyzer': {
'default': {
'type': 'italian'
}
}
}
}
}
}
如果您不想在开发或生产中运行 Elasticsearch 服务器,可以使用许多托管服务,包括 Bonsai ,它提供适合测试和开发的免费帐户。使用盆景:
- 在
Bonsai
注册一个帐户 - 使用您的 Bonsai 仪表板创建一个集群。
- 使用 Bonsai 仪表板中的集群 URL 在
WAGTAILSEARCH_BACKENDS
的 Elasticsearch 条目中配置URLS
- 跑
./manage.py update_index
OpenSearch
OpenSearch 是一个社区驱动的搜索引擎,最初是 Elasticsearch 7 的一个分支。Wagtail 通过 wagtail.search.backends.elasticsearch7
后端和 Elasticsearch Python 库的 7.13.4 版本支持 OpenSearch。该库的后续版本只允许连接到 Elastic 品牌的服务器,并且与 OpenSearch 不兼容。
亚马逊 AWS OpenSearch
OpenSearch 后端与 Amazon Elasticsearch Service 兼容,但需要额外配置来处理基于 IAM 的身份验证。这可以通过 requests-aws4auth 封装以及以下配置来完成:
from elasticsearch import RequestsHttpConnection
from requests_aws4auth import AWS4Auth
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch7',
'INDEX': 'wagtail',
'TIMEOUT': 5,
'HOSTS': [{
'host': 'YOURCLUSTER.REGION.es.amazonaws.com',
'port': 443,
'use_ssl': True,
'verify_certs': True,
'http_auth': AWS4Auth('ACCESS_KEY', 'SECRET_KEY', 'REGION', 'es'),
}],
'OPTIONS': {
'connection_class': RequestsHttpConnection,
},
}
}
切换为你自己的
Wagtail 搜索后端实现 wagtail/wagtail/wagtailsearch/backends/base.py
中定义的接口。后端的 search()
方法至少必须返回对象集合或 model.objects.none()
。对于功能齐全的搜索后端,请检查 elasticsearch.py
中的 Elasticsearch 后端代码。