2. Поисковые технологии. О
Sphinx
Система полнотекстово поиска7
Милиарды документов7
Высокая скорость поисковых запросов7
Обновление данных в реальном времени7
Масштабируемость (встроенные механизмы шардинга и зеркал)7
Текстовый поиск от 10 до 10 тысяч раз быстрее чем mysql7
Поддержака дополнительных атрибутов для каждой записи и
фильтрация по ним
2
3. Поисковые технологии. О
Источники данных
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
5. Поисковые технологии. О
Дисковые индексы
Строятся индексацией источников данных7
Занимают минимум памяти7
Не могут быть обновлены 7
Могут быть смержены с другим дисковым индексов
5
6. Поисковые технологии. О
Индексы реального времени
Не использую источников данных7
Могут быть созданы на основе дискового индекса7
Можно добавлять/изменить/удалять строки в
реальном времени7
Хранится в памяти (если она есть)7
Пишет бинарные логи
6
7. Поисковые технологии. О
Поля/атрибуты
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
9. Поисковые технологии. Особенности
Поисковые технологии. О
Real-time обновления
update: только атрибуты int, bigint, float, MVA7
insert: все поля, id должно быть уникальным7
replace: все поля, заменять строку7
delete7
alter7
!
indexer --merge main delta: «обновление» дисковых индексов
9
10. Поисковые технологии. О
Работа с RT индексами
ATTACH INDEX diskindex TO RTINDEX rtindex7
FLUSH RTINDEX rtindex7
TRUNCATE RTINDEX rtindex
10
16. Масштабирование
# распределяем индекс на 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
17. Поисковые технологии. О
Обновления индексов
Update - не блокирует индекс, быстрей7
Replace - блокирует индекс на чтение и запись,
долгий7
Alter - блокирует индекс на чтение и запись, очень
долгий7
Выгодно блокировать только часть
распределенного индекса
17
19. Поисковые технологии. Особенности
Поисковые технологии. О
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
20. Поисковые технологии. О
Некоторые особенности
Есть сортировка внутри групп: WITHIN GROUP ORDER BY7
Можно запросить несколько членов группы: GROUP <N> BY7
В select есть функция groupby(), удобна при группировки по
mva полям7
В where нельзя использовать OR, но можно использовать в
select7
Есть секция OPTION7
Есть транзакции
20
23. Поисковые технологии. Особенности
Поисковые технологии. О
Полнотекстовый поиск
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
24. Поисковые технологии. Особенности
Поисковые технологии. О
Гео-поиск
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
25. Поисковые технологии. Особенности
Поисковые технологии. О
Сниппеты
mysql> CALL SNIPPETS('красный большой телефон',
'products', 'телефоном красным');7
+---------------------------------------------------------------- +7
| snippet
|7
+---------------------------------------------------------------- +7
| <b>красный</b> большой <b>телефон</b> |7
+-----------------------------------------------------------------+
25
26. Подсчет слов
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
27. Поисковые технологии. О
Другие функции
SHOW AGENT STATUS7
SHOW PROFILE7
SHOW INDEX STATUS7
OPTIMIZE INDEX7
SHOW PLAN7
SHOW/DROP/CREATE PLUGINS7
SHOW DATABASES7
ATTACH INDEX7
FLUSH RTINDEX7
….
27
28. Поисковые технологии. Особенности
Поисковые технологии. О
Установка демона
Скачать с официального сайта7
Собрать из исходников SVN7
Разные ключики при сборке7
Стандартные пути
28