Spec-Zone.ru › Wagtail

Бэкэнды

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API