SlideShare a Scribd company logo
Поисковые технологии
Часть 2. Sphinx: установка, настройка, эксплуатация
1
Поисковые технологии. О

Sphinx
Система полнотекстово поиска7
Милиарды документов7
Высокая скорость поисковых запросов7
Обновление данных в реальном времени7
Масштабируемость (встроенные механизмы шардинга и зеркал)7
Текстовый поиск от 10 до 10 тысяч раз быстрее чем mysql7
Поддержака дополнительных атрибутов для каждой записи и
фильтрация по ним
2
Поисковые технологии. О

Источники данных
source mysql7
{7
type = ...7
...7
}

source products : mysql7
{7
...7
…7
}

MySQL, PostgreSQL, MS SQL (on Windows), and ODBC.7
xmlpipe7
tsvpipe (Tab Separated Values)
3
Поисковые технологии. Особенности
Поисковые технологии. О

Индексы
index products7
{7
type = ...7
...7
}

index products : pr_plain7
{7
…7
...7
}

Disk7
Realtime (RT)
4
Поисковые технологии. О

Дисковые индексы
Строятся индексацией источников данных7
Занимают минимум памяти7
Не могут быть обновлены 7
Могут быть смержены с другим дисковым индексов

5
Поисковые технологии. О

Индексы реального времени
Не использую источников данных7
Могут быть созданы на основе дискового индекса7
Можно добавлять/изменить/удалять строки в
реальном времени7
Хранится в памяти (если она есть)7
Пишет бинарные логи
6
Поисковые технологии. О

Поля/атрибуты
Full-text (строка, нельзя прочесть оригинал, только поиск)7
uint (unsigned integers, 32-х битное целое число без знака)7
bigint (64-х битное целое число со знаком)7
float (32-х битное число с плавающей точкой)7
bool (1 бит)7
UNIX timestamps7
strings (строка, можно прочесть оригинал, нельзя искать)7
JSON (полноценные json-структуры, есть особенности)7
MVA (коллеция uint)

7
Пример индекса
bigint
id
1

field

string

name

anons

Телефон

Большой,7
хороший

mva

json

timestamp

bool

name

categories

properties

updated

ivl1

1,455,678

{232:{‘min’:
23,’max’: 67}}

1393241487

0

Телефон

2
3
4

8
Поисковые технологии. Особенности
Поисковые технологии. О

Real-time обновления
update: только атрибуты int, bigint, float, MVA7
insert: все поля, id должно быть уникальным7
replace: все поля, заменять строку7
delete7
alter7
!

indexer --merge main delta: «обновление» дисковых индексов
9
Поисковые технологии. О

Работа с RT индексами
ATTACH INDEX diskindex TO RTINDEX rtindex7
FLUSH RTINDEX rtindex7
TRUNCATE RTINDEX rtindex

10
Масштабирование
Клиент

полный
индекс

полный
индекс

полный
индекс

11

полный
индекс
Обновление
Клиент

полный
индекс

полный
индекс

полный
индекс

replace / alter
12

полный
индекс
Масштабирование
Клиент
Прокси сфинкс

Прокси сфинкс

кусочек
индекса 1

кусочек
индекса 1

кусочек
индекса 2

13

кусочек
индекса 2
Обновление
Клиент
Прокси сфинкс

Прокси сфинкс

кусочек
индекса 1

кусочек
индекса 1

кусочек
индекса 2

14

replace / alter

кусочек
индекса 2
Обновление
Клиент
Прокси сфинкс

Прокси сфинкс

кусочек
индекса 1

кусочек
индекса 1
1

кусочек
индекса 2

2
15

replace / alter

кусочек
индекса 2
Масштабирование
# распределяем индекс на 4 сервера7
# делаем два чанка и по два зеркала каждого7
# box1, box2 содержат локальный индекс chunk17
# box3, box4 содержат локальный индекс chunk27
!

# config on box1, box27
agent = box3:9312|box4:9312:chunk27
!

# config on box3, box47
agent = box1:9312|box2:9312:chunk1

16
Поисковые технологии. О

Обновления индексов
Update - не блокирует индекс, быстрей7
Replace - блокирует индекс на чтение и запись,
долгий7
Alter - блокирует индекс на чтение и запись, очень
долгий7
Выгодно блокировать только часть
распределенного индекса
17
Поисковые технологии. О

Клиенты

API, клиенты для PHP, Python, Java и др.7
SphinxQL, через mysql адаптер (через IDE не
получится)

18
Поисковые технологии. Особенности
Поисковые технологии. О

SphinxQL клиент
SELECT7
select_expr [, select_expr ...]7
FROM index [, index2 ...]7
[WHERE where_condition]7
[GROUP BY {col_name | expr_alias} [, {sol_name | expr_alias}]]7
[WITHIN GROUP ORDER BY {col_name | expr_alias} {ASC | DESC}]7
7 [HAVING having_condition]7
[ORDER [N] BY {col_name | expr_alias} {ASC | DESC} [, ...]]7
[LIMIT [offset,] row_count]7
[OPTION opt_name = opt_value [, ...]]

19
Поисковые технологии. О

Некоторые особенности
Есть сортировка внутри групп: WITHIN GROUP ORDER BY7
Можно запросить несколько членов группы: GROUP <N> BY7
В select есть функция groupby(), удобна при группировки по
mva полям7
В where нельзя использовать OR, но можно использовать в
select7
Есть секция OPTION7
Есть транзакции
20
Поисковые технологии. О

Функции
ABS(), ALL(), ANY(), BIGINT(), BITDOT(), CEIL(),
CONTAINS(), COS(), CRC32(), DAY(), DOUBLE(), EXP(),
FIBONACCI(), FLOOR(), GEODIST(), GEOPOLY2D(),
GREATEST(), IDIV(), IF(), IN(), INDEXOF(), INTEGER(),
INTERVAL(), LEAST(), LENGTH(), LN(), LOG10(), LOG2(),
MAX(), MIN(), MIN_TOP_SORTVAL(), MIN_TOP_WEIGHT(),
MONTH(), NOW(), POLY2D(), POW(), REMAP(), SIN(), SINT(),
SQRT(), UINT(), YEAR(), YEARMONTH(), YEARMONTHDAY()

21
Поисковые технологии. О

Операторы
Арифметические: +, -, *, /, %, DIV, MOD7
Сравнение: <, > <=, >=, =, <>7
Булевые: AND, OR, NOT7
Битовые: &, |

22
Поисковые технологии. Особенности
Поисковые технологии. О

Полнотекстовый поиск
OR: hello | world7
NOT: hello -world; hello !world7
Поля: @title hello @body world; @!(title,body) hello world; @* hello7
Ограничения полей: @body[50] hello; @!title hello world7
Поиск фраз: "hello world"; "hello world"~10; "the world is a wonderful place»/37
Конкретный порядок: aaa << bbb << ccc; ^hello world$7
Точные словоформы: raining =cats and =dogs7
и другие …
23
Поисковые технологии. Особенности
Поисковые технологии. О

Гео-поиск
SELECT id, GEODIST(lat, lng, 40.7, -73.9, {in=degrees,
out=feet}) FROM gee7
in = {deg | degrees | rad | radians}7
out = {m | meters | km | kilometers | ft | feet | mi | miles}7
method = {haversine | adaptive}

24
Поисковые технологии. Особенности
Поисковые технологии. О

Сниппеты
mysql> CALL SNIPPETS('красный большой телефон',
'products', 'телефоном красным');7
+---------------------------------------------------------------- +7
| snippet
|7
+---------------------------------------------------------------- +7
| <b>красный</b> большой <b>телефон</b> |7
+-----------------------------------------------------------------+

25
Подсчет слов
mysql> CALL KEYWORDS('телефоном', 'products' , 1);7
+--------------------+----------------+-------+--------+7
| tokenized
| normalized | docs | hits |7
+--------------------+----------------+-------+--------+7
| телефоном
| телефон | 10386 | 58271 |7
+--------------------+----------------+-------+---------+7
1 row in set (0.00 sec)

26
Поисковые технологии. О

Другие функции
SHOW AGENT STATUS7
SHOW PROFILE7
SHOW INDEX STATUS7
OPTIMIZE INDEX7
SHOW PLAN7
SHOW/DROP/CREATE PLUGINS7
SHOW DATABASES7
ATTACH INDEX7
FLUSH RTINDEX7
….

27
Поисковые технологии. Особенности
Поисковые технологии. О

Установка демона
Скачать с официального сайта7
Собрать из исходников SVN7
Разные ключики при сборке7
Стандартные пути

28
Поисковые технологии. Особенности
Поисковые технологии. О

Версии демона
Релиз 7
Бета7
Документация

29
Поисковые технологии. О

Эксплуатация
searchd -c /etc/sphinx.conf7
searchd --stop / --stopwait -c /etc/sphinx.conf7
indexer --rotate --all / indexer --rotate products_plain7
indextool7
watchdog

30
Вопросы?
Андрей Борю

31

More Related Content

PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PDF
Где живут Ваши объявления / Тюрин Михаил (Avito)
PPTX
Поиск наизнанку
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PDF
Леонид Васильев "Python в инфраструктуре поиска"
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Где живут Ваши объявления / Тюрин Михаил (Avito)
Поиск наизнанку
Docker & Puppet: как их скрестить и надо ли вам это?
Леонид Васильев "Python в инфраструктуре поиска"

What's hot (20)

PDF
Денис Иванов
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PDF
Дмитрий Стогов
PDF
pgconf.ru 2015 avito postgresql
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Облако в Badoo год спустя
PPTX
Антон Турецкий
PDF
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PDF
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
PDF
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
PPTX
Docker в работе: взгляд на использование в Badoo через год
PDF
Владимир Бородин - PostgreSQL
PDF
Советы для начинающих разработчиков PostgreSQL
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PDF
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
PDF
Вячеслав Бахмутов
Денис Иванов
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Дмитрий Стогов
pgconf.ru 2015 avito postgresql
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Облако в Badoo год спустя
Антон Турецкий
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Docker в работе: взгляд на использование в Badoo через год
Владимир Бородин - PostgreSQL
Советы для начинающих разработчиков PostgreSQL
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Вячеслав Бахмутов
Ad

Viewers also liked (6)

PDF
Поисковые технологии. Часть 1: основы и особенности.
PDF
Real-time индексы (Ярослав Ворожко)
PDF
"Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ...
PDF
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
PPTX
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
PDF
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Поисковые технологии. Часть 1: основы и особенности.
Real-time индексы (Ярослав Ворожко)
"Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ...
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Ad

Similar to Sphinx. настройка, эксплуатация (20)

PPT
Cфинкс и поиск терабайта
PPT
Tagconf 12 - SphinxSearch - 1
PPT
sphinx Hlpp2008
PPTX
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
PPT
эффективный полнотекстовый поиск по базам данных петр зайцев
PPTX
Поиск на своем сайте, обзор open source решений
PPTX
Sphinx 2013
PPT
поисковые системы презентация ученика
PPT
Puple's presentation
PDF
Андрей Аксёнов, Sphinx Technologies Inc.
PDF
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
PDF
Нагруженный поиск на Sphinx
PPTX
Sphinx
PPTX
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
PPTX
Виталий Гаврилов (Ленвендо)
PPTX
поиск в интернете
PDF
Индексируй неиндексирумое
PPTX
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
PPTX
Lucene in odnoklassniki.ru
PPTX
Как устроен поиск (Андрей Аксёнов)
Cфинкс и поиск терабайта
Tagconf 12 - SphinxSearch - 1
sphinx Hlpp2008
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
эффективный полнотекстовый поиск по базам данных петр зайцев
Поиск на своем сайте, обзор open source решений
Sphinx 2013
поисковые системы презентация ученика
Puple's presentation
Андрей Аксёнов, Sphinx Technologies Inc.
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Нагруженный поиск на Sphinx
Sphinx
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Виталий Гаврилов (Ленвендо)
поиск в интернете
Индексируй неиндексирумое
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Lucene in odnoklassniki.ru
Как устроен поиск (Андрей Аксёнов)

Sphinx. настройка, эксплуатация