Download - SphinxSearch Meetup - Tips&tricks
Tips&Tricks
SphinxSearch Meetup @ Avito16.05.2015, Роман Павлушко <[email protected]>
Как мы используем Sphinx
Как поисковой движок для различных сервисов :) - поиск объявлений на сайте - 30m docs (14GB), 10k+ qps- поиск объявлений в BO - 570m docs (350GB), <10 qps- поиск рекламных объявлений с аукционом - UDF rank- микросервисы (подсказки, «suggest» и тп)
Server qps (x16 ~ 12k пик) Server CPU
Сверхбыстрая индексация из БД
Индексатор на сервер с данными (DB, xml, etc) или реплика на сервер с indexer, кому как удобно
Весь ресурс базы отдаем индексаторуМы ставим репликацию pg londiste на паузу, это также не позволяет данным меняться в процессе построения индексов.
Параллельное построение индексов
Больше стоп-слов, выше скорость
Построение индексов в tmpfsКонечно же, если позволяет объем оперативной памяти
График переиндексации100 000 row/sec или 50 MB/sec!
В большинстве случаев можно жить без дельты
Потеря данных в распределенном индексе
101112
1314
main deltasql_query killist
131412
10111314
new main
merge
Решение потери данных
Это в упрощенном варианте (MySQL)На PostgreSQL можно сделать красивее :)
Индексация из tsv + killisttsvpipe_killist Not Found
Обновление атрибутов в кластере из реплик
Задача: обновить атрибут в SphinxПроблема: много реплик, обновлять на каждом не вариантРешение: специальный распределенный индекс
Динамические или разряженные атрибуты
Особенность данных:1) много атрибутов (сотни)2) в каждом документе заполнены единицы
Проблемы:1) тяжелый запрос на вычитку2) нечитаемые конфиг3) для добавления новых атрибутов reindex4) лишние данные в spa
Решение: JSON+ добавление новых атрибутов на лету+ на наших данных в 4 раза меньше вес индекса+ выше скорость индексации- чуть ниже скорость поиска- нельзя обновлять кусочком, только весь json
Горячая подмена поисковиков
Бытрые поиск на последних страницах
Минусы решения:
- нужно знать кол-во результатовперед поиском
- в приложении выполнять обратную сортировку результата
- дополнительная реализация
Ускорение поиска по атрибутам
Фильтр "ИЛИ" по атрибутам и т.п.SphinxQL
SQL
С помощью expression в запросе можно творить чудеса:
Сложные и быстрые выражения в SphinxQL
Парсинг большого запроса в Sphinxтяжелая операция относительно других.
Очень сложные запросы лучше прятать в UDF
UDF - это просто!
The End
Вопросы?
Замечания?
Предложения?
Хотите у нас заниматься поиском?