Умный поиск — дополнительный модуль Smarty smart_search на базе Manticore Search, который позволяет заменить обычный поиск фильмов по подстроке в названии на полнотекстовый поиск по разным полям фильма:
- умный поиск прощает опечатки (что особенно полезно при голосовом вводе);
- фильмы ищутся по жанрам, актёрам и другой мете;
- поиск реже выдаёт пустые результаты — абоненту предлагается больше вариантов контента;
- умный поиск шустрее обычного 🙂
Технические детали умного поиска
- доступен, начиная с версии Smarty 2.12;
- работает через отдельный индекс Manticore, а не через SQL-поиск по основной БД;
- ищет сразу по названию, жанрам, актёрам и режиссёрам, году и странам;
- сортирует выдачу по релевантности внутри Manticore: совпадение в названии важнее вторичных полей, совпадение в начале названия поднимается выше;
- учитывает словоформы и префикс (поиск срабатывает уже от одного символа);
- есть инструмент для дебага, почему фильм попал в выдачу: параметр
search_detailвозвращает подсветку совпадений и вес релевантности; - не использует опции встроенного поиска
TVMW_USE_UNACCENT_SEARCHиTVMW_VIDEO_LIST_SEARCH_BY_RELEVANCE— они на умный поиск не влияют; - подключается отдельной опцией лицензии Smarty и требует установленный Manticore плюс регулярную синхронизацию индекса.
Как настроить
1 Обновление ключа лицензии Smarty
Пример фрагмента лицензии:
SMARTY_LICENSE_PARAMS = {
...
'smart_search',
...
}2 Установка Manticore
Manticore можно поставить на тот же сервер, что и Smarty, или на отдельный хост. По умолчанию Smarty подключается к localhost:9306 (MySQL-протокол Manticore).
Debian / Ubuntu:
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb sudo dpkg -i manticore-repo.noarch.deb sudo apt update sudo apt install manticore sudo systemctl enable manticore sudo systemctl start manticore
Другие ОС — в документации Manticore. Если после установки не меняли /etc/manticoresearch/manticore.conf, дефолтные MANTICORE_HOST и MANTICORE_PORT в Smarty подойдут.
Проверка, что сервис слушает порт:
mysql -h0 -P9306
3 Настройки Smarty
Опции задаются в файле конфигурации Smarty /etc/microimpuls/smarty/smarty.py (или в кастомном файле конфигурации). После изменения перезагрузите uwsgi: sudo service uwsgi restart.
Модуль нужно включить в INSTALLED_APPS:
INSTALLED_APPS += (
'smart_search',
)Подключение к Manticore:
MANTICORE_HOST— адрес хоста Manticore Search. Тип данных: string. По умолчанию localhost.MANTICORE_PORT— порт подключения к Manticore Search. Тип данных: int. По умолчанию 9306.
Пример настройки:
MANTICORE_HOST = 'localhost' MANTICORE_PORT = 9306
Для соединения с Manticore на сервере Smarty нужна библиотека pymysql. Если при запуске команд появляется No module named 'pymysql':
smarty_manage pip install pymysql==1.0.2 --settings=settings.<settings name>
Команды синхронизации индекса
Индекс в Manticore не обновляется сам при изменении видеотеки. Сначала актуализируется схема таблиц, затем данные каталога.
Синхронизация схемы
Команда:
smarty_manage manticore_sync_database --settings=settings.<settings name>
Создаёт в Manticore таблицы модуля smart_search и при необходимости обновляет их структуру. Для видео создаётся таблица tvmiddleware_video:
id— идентификатор строки в Manticore;name— название;actors_set— актёры и режиссёры через запятую;genres— жанры через запятую;year— год выхода;countries— страны;client_id— идентификатор Client в Smarty;smarty_id— идентификатор видео в Smarty.
Команду достаточно запускать после обновления Smarty, если изменилась схема индекса.
Синхронизация каталога видео
Команда:
smarty_manage manticore_sync_content --settings=settings.<settings name>
Записывает в Manticore данные о фильмах в Smarty и обновляет уже проиндексированные записи. Запускайте регулярно — с той частотой, с какой в видеотеке меняются фильмы. Без актуальной схемы команда не сработает.
Обязательные параметры:
--client_id – идентификатор Client, каталог которого синхронизируется.
Необязательные параметры:
--create_chunk_size – максимум строк, добавляемых в Manticore за один запрос. По умолчанию 50.
--delete_chunk_size – максимум строк, удаляемых из Manticore за один запрос. По умолчанию 50.
--force_full_sync – полная переиндексация: таблицы очищаются, каталог импортируется целиком. Нужен после смены схемы индекса или если выдача сильно расходится с видеотекой.
Пример первой загрузки и последующих обновлений:
smarty_manage manticore_sync_database --settings=settings.<settings name> smarty_manage manticore_sync_content --client_id=1 --settings=settings.<settings name>
После обновления Smarty, которое меняет структуру индекса:
smarty_manage manticore_sync_database --settings=settings.<settings name> smarty_manage manticore_sync_content --client_id=1 --force_full_sync --settings=settings.<settings name>
Клиентские приложения
Умный поиск уже интегрирован в ТВ-интерфейсе Titanium и мобильном приложении, включается опцией use_smart_video_search.
