Sphinx. настройка, эксплуатация
-
Upload
andreyborue -
Category
Technology
-
view
683 -
download
0
description
Transcript of Sphinx. настройка, эксплуатация
Поисковые технологииЧасть 2. Sphinx: установка, настройка, эксплуатация
�1
Поисковые технологии. О
SphinxСистема полнотекстово поиска7
Милиарды документов7
Высокая скорость поисковых запросов7
Обновление данных в реальном времени7
Масштабируемость (встроенные механизмы шардинга и зеркал)7
Текстовый поиск от 10 до 10 тысяч раз быстрее чем mysql7
Поддержака дополнительных атрибутов для каждой записи и фильтрация по ним
�2
Поисковые технологии. О
Источники данных
MySQL, PostgreSQL, MS SQL (on Windows), and ODBC.7
xmlpipe7
tsvpipe (Tab Separated Values)
�3
source mysql7{7 type = ...7 ...7}
source products : mysql7{7 ...7 …7}
Поисковые технологии. О Поисковые технологии. Особенности
Индексы
Disk7
Realtime (RT)
�4
index products7{7 type = ...7 ...7}
index products : pr_plain7{7 …7 ...7}
Поисковые технологии. О
Дисковые индексы
Строятся индексацией источников данных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
Пример индекса
�8
bigint field string mva json timestamp bool
id name anons name categories properties updated ivl1
1 Телефон Большой,7хороший Телефон 1,455,678 {232:{‘min’:
23,’max’: 67}} 1393241487 0
2
3
4
Поисковые технологии. О Поисковые технологии. Особенности
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
полный индекс
полный индекс
полный индекс
полный индекс
Клиент
Обновление
�12
полный индекс
полный индекс
полный индекс
полный индекс
Клиент
replace / alter
Масштабирование
�13
кусочек индекса 1
кусочек индекса 1
кусочек индекса 2
кусочек индекса 2
Клиент
Прокси сфинкс Прокси сфинкс
Обновление
�14
кусочек индекса 1
кусочек индекса 1
кусочек индекса 2
кусочек индекса 2
Клиент
Прокси сфинкс Прокси сфинкс
replace / alter
Обновление
�15
кусочек индекса 1
кусочек индекса 1
кусочек индекса 2
кусочек индекса 2
Клиент
Прокси сфинкс Прокси сфинкс
replace / alter
1 2
Масштабирование
�16
# распределяем индекс на 4 сервера7# делаем два чанка и по два зеркала каждого7# box1, box2 содержат локальный индекс chunk17# box3, box4 содержат локальный индекс chunk27!# config on box1, box27agent = box3:9312|box4:9312:chunk27!# config on box3, box47agent = box1:9312|box2:9312:chunk1
Поисковые технологии. О
Обновления индексов
Update - не блокирует индекс, быстрей7
Replace - блокирует индекс на чтение и запись, долгий7
Alter - блокирует индекс на чтение и запись, очень долгий7
Выгодно блокировать только часть распределенного индекса
�17
Поисковые технологии. О
Клиенты
API, клиенты для PHP, Python, Java и др.7
SphinxQL, через mysql адаптер (через IDE не получится)
�18
Поисковые технологии. О Поисковые технологии. Особенности
SphinxQL клиент
�19
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}]77 [HAVING having_condition]7 [ORDER [N] BY {col_name | expr_alias} {ASC | DESC} [, ...]]7 [LIMIT [offset,] row_count]7 [OPTION opt_name = opt_value [, ...]]
Поисковые технологии. О
Некоторые особенностиЕсть сортировка внутри групп: WITHIN GROUP ORDER BY7
Можно запросить несколько членов группы: GROUP <N> BY7
В select есть функция groupby(), удобна при группировки по mva полям7
В where нельзя использовать OR, но можно использовать в select7
Есть секция OPTION7
Есть транзакции
�20
Поисковые технологии. О
Функции
�21
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()
Поисковые технологии. О
Операторы
Арифметические: +, -, *, /, %, 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
Поисковые технологии. О Поисковые технологии. Особенности
Сниппеты
�25
mysql> CALL SNIPPETS('красный большой телефон', 'products', 'телефоном красным');7+---------------------------------------------------------------- +7| snippet |7+---------------------------------------------------------------- +7| <b>красный</b> большой <b>телефон</b> |7+-----------------------------------------------------------------+
Подсчет слов
�26
mysql> CALL KEYWORDS('телефоном', 'products' , 1);7+--------------------+----------------+-------+--------+7| tokenized | normalized | docs | hits |7+--------------------+----------------+-------+--------+7| телефоном | телефон | 10386 | 58271 |7+--------------------+----------------+-------+---------+71 row in set (0.00 sec)
Поисковые технологии. О
Другие функции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