SphinxSearch Meetup - Tips&tricks

15
Tips&Tricks SphinxSearch Meetup @ Avito 16.05.2015, Роман Павлушко <[email protected]>

Transcript of SphinxSearch Meetup - Tips&tricks

Page 1: SphinxSearch Meetup - Tips&tricks

Tips&Tricks

SphinxSearch Meetup @ Avito16.05.2015, Роман Павлушко <[email protected]>

Page 2: SphinxSearch Meetup - Tips&tricks

Как мы используем Sphinx

Как поисковой движок для различных сервисов :) - поиск объявлений на сайте - 30m docs (14GB), 10k+ qps- поиск объявлений в BO - 570m docs (350GB), <10 qps- поиск рекламных объявлений с аукционом - UDF rank- микросервисы (подсказки, «suggest» и тп)

Server qps (x16 ~ 12k пик) Server CPU

Page 3: SphinxSearch Meetup - Tips&tricks

Сверхбыстрая индексация из БД

Индексатор на сервер с данными (DB, xml, etc) или реплика на сервер с indexer, кому как удобно

Весь ресурс базы отдаем индексаторуМы ставим репликацию pg londiste на паузу, это также не позволяет данным меняться в процессе построения индексов.

Параллельное построение индексов

Больше стоп-слов, выше скорость

Построение индексов в tmpfsКонечно же, если позволяет объем оперативной памяти

Page 4: SphinxSearch Meetup - Tips&tricks

График переиндексации100 000 row/sec или 50 MB/sec!

В большинстве случаев можно жить без дельты

Page 5: SphinxSearch Meetup - Tips&tricks

Потеря данных в распределенном индексе

101112

1314

main deltasql_query killist

131412

10111314

new main

merge

Page 6: SphinxSearch Meetup - Tips&tricks

Решение потери данных

Это в упрощенном варианте (MySQL)На PostgreSQL можно сделать красивее :)

Page 7: SphinxSearch Meetup - Tips&tricks

Индексация из tsv + killisttsvpipe_killist Not Found

Page 8: SphinxSearch Meetup - Tips&tricks

Обновление атрибутов в кластере из реплик

Задача: обновить атрибут в SphinxПроблема: много реплик, обновлять на каждом не вариантРешение: специальный распределенный индекс

Page 9: SphinxSearch Meetup - Tips&tricks

Динамические или разряженные атрибуты

Особенность данных:1) много атрибутов (сотни)2) в каждом документе заполнены единицы

Проблемы:1) тяжелый запрос на вычитку2) нечитаемые конфиг3) для добавления новых атрибутов reindex4) лишние данные в spa

Решение: JSON+ добавление новых атрибутов на лету+ на наших данных в 4 раза меньше вес индекса+ выше скорость индексации- чуть ниже скорость поиска- нельзя обновлять кусочком, только весь json

Page 10: SphinxSearch Meetup - Tips&tricks

Горячая подмена поисковиков

Page 11: SphinxSearch Meetup - Tips&tricks

Бытрые поиск на последних страницах

Минусы решения:

- нужно знать кол-во результатовперед поиском

- в приложении выполнять обратную сортировку результата

- дополнительная реализация

Page 12: SphinxSearch Meetup - Tips&tricks

Ускорение поиска по атрибутам

Page 13: SphinxSearch Meetup - Tips&tricks

Фильтр "ИЛИ" по атрибутам и т.п.SphinxQL

SQL

С помощью expression в запросе можно творить чудеса:

Page 14: SphinxSearch Meetup - Tips&tricks

Сложные и быстрые выражения в SphinxQL

Парсинг большого запроса в Sphinxтяжелая операция относительно других.

Очень сложные запросы лучше прятать в UDF

UDF - это просто!

Page 15: SphinxSearch Meetup - Tips&tricks

The End

Вопросы?

Замечания?

Предложения?

Хотите у нас заниматься поиском?