SphinxSearch Meetup - Tips&tricks

Post on 08-Aug-2015

206 views 5 download

Transcript of SphinxSearch Meetup - Tips&tricks

Tips&Tricks

SphinxSearch Meetup @ Avito16.05.2015, Роман Павлушко <rpavlushko@avito.ru>

Как мы используем 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

Вопросы?

Замечания?

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

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