Бэкэнды
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
Предупреждение
Этот параметр может не работать с 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
Поддерживаются версии Elasticsearch 5, 6 и 7. Используйте соответствующий бэкенд для вашей версии:
-
wagtail.search.backends.elasticsearch5(Elasticsearch 5.x) -
wagtail.search.backends.elasticsearch6(Elasticsearch 6.x) -
wagtail.search.backends.elasticsearch7(Elasticsearch 7.x)
Необходимые компоненты — сама служба Elasticsearch и, через pip, пакет elasticsearch-py. Основная версия пакета должна соответствовать установленной версии Elasticsearch:
pip install "elasticsearch>=5.0.0,<6.0.0" # for Elasticsearch 5.x
pip install "elasticsearch>=6.4.0,<7.0.0" # for Elasticsearch 6.x
pip install "elasticsearch>=7.0.0,<8.0.0" # for Elasticsearch 7.x
Предупреждение
Версия 6.3.1 библиотеки клиента Elasticsearch несовместима с Wagtail. Используйте версию 6.4.0 или выше.
Бэкенд настраивается в настройках:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch5',
'URLS': ['http://localhost:9200'],
'INDEX': 'wagtail',
'TIMEOUT': 5,
'OPTIONS': {},
'INDEX_SETTINGS': {},
}
}
За исключением BACKEND, ключи являются необязательными и по умолчанию принимают указанные значения. Любой определенный ключ в OPTIONS передается напрямую конструктору Elasticsearch в качестве чувствительного к регистру именованного аргумента (например, 'max_retries': 1).
Имя пользователя и пароль могут быть необязательно указаны в поле URL, чтобы предоставить учетные данные для проверки подлинности службы Elasticsearch:
WAGTAILSEARCH_BACKENDS = {
'default': {
...
'URLS': ['http://username:password@localhost:9200'],
...
}
}
INDEX_SETTINGS — это словарь, используемый для переопределения значений по умолчанию при создании индекса. Значения по умолчанию определены в классе ElasticsearchSearchBackend в модуле wagtail/wagtail/search/backends/elasticsearch7.py. Любой новый ключ добавляется, а любой существующий ключ, если он не является словарем, заменяется новым значением. Вот пример того, как настроить количество фрагментов и установить итальянский LanguageAnalyzer в качестве анализатора по умолчанию:
WAGTAILSEARCH_BACKENDS = {
'default': {
...,
'INDEX_SETTINGS': {
'settings': {
'index': {
'number_of_shards': 1,
},
'analysis': {
'analyzer': {
'default': {
'type': 'italian'
}
}
}
}
}
}
Если вы предпочитаете не запускать сервер Elasticsearch в режиме разработки или производства, доступно множество размещенных служб, включая Bonsai, которая предлагает бесплатный аккаунт, подходящий для тестирования и разработки. Чтобы использовать Bonsai:
- Зарегистрируйтесь на сайте
Bonsai - Используйте панель управления Bonsai для создания кластера.
- Настройте
URLSв записи Elasticsearch вWAGTAILSEARCH_BACKENDSс помощью URL-адреса кластера из вашей панели управления Bonsai - Запустите
./manage.py update_index
Amazon AWS Elasticsearch
Бэкенд Elasticsearch совместим с Amazon Elasticsearch Service, но требует дополнительной настройки для обработки аутентификации на основе IAM. Это можно сделать с помощью пакета requests-aws4auth вместе со следующей конфигурацией:
from elasticsearch import RequestsHttpConnection
from requests_aws4auth import AWS4Auth
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch5',
'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 в elasticsearch.py.
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/topics/search/backends.html