Бэкенды
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.
Изменено в версии 2.15: wagtail.search.backends.database заменяет старый бэкенд wagtail.search.backends.db, который работает только с простым сопоставлением подстрок. wagtail.search.backends.db по-прежнему является значением по умолчанию, если WAGTAILSEARCH_BACKENDS не указано; wagtail.search.backends.database станет значением по умолчанию в Wagtail 2.17.
Бэкенд 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 и пакет elasticsearch-py через pip. Главная версия пакета должна соответствовать установленной версии 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
Предупреждение
Бэкенд настраивается в настройках:
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/v2.16.3/topics/search/backends.html