Spec-Zone.ru › Wagtail 2

Бэкенды

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.

  • Предыдущая Поиск
  • Следующая Сниппеты

Содержание страницы

  • Бэкэнды
    • AUTO_UPDATE
    • ATOMIC_REBUILD
    • BACKEND
      • Бэкенд базы данных (по умолчанию)
      • Бэкенд Elasticsearch
        • Amazon AWS Elasticsearch
      • Разработка собственного

© 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

Spec-Zone.ru

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