Spec-Zone.ru › Wagtail 3

Бэкенды

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 и, через 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

Предупреждение

Бэкенд настраивается в настройках:

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. Любой новый ключ добавляется, любой существующий ключ, если он не является словарем, заменяется новым значением. Вот пример настройки количества фрагментов и установки Italian 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/v3.0.3/topics/search/backends.html

Spec-Zone.ru

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