Sphinx и MySQL. Установка и использование движка SphinxSE
В продолжение темы о Sphinx, расскажу о SphinxSE, это движок для MySQL, который будет работать со Sphinx индексами непосредственно из MySQL.
Что такое SphinxSE?
Движок SphinxSE не хранит данные сам, а является звеном, которое позволяет серверу MySQL общаться с "searchd", запускать поисковые запросы и получать результаты поиска. Вся индексация и поиск происходит за пределами MySQL.
SphinxSE может быть собран только под MySQL 5.x используя архитектуру плагинов, которая не поддерживается в MySQL 4.x.
SphinxSE позволяет:
- Легко портировать MySQL FTS (full-text search) приложения в Sphinx;
- Использовать Sphinx, где невозможно использовать API, например если нет API для какого-то языка;
- Оптимизировать добавленные Sphinx'ом результаты обработки на стороне MySQL, например: JOIN'ить результаты поиска с другими таблицами MySQL, добавлять дополнительную фильтрацию данных на стороне MySQL и т.д.
Установка SphinxSE
Ставить будем из сорцов и на FreeBSD 6.3.
Сначала скачаем дистрибутивы:
# fetch # fetch
Скачать MySQL:
Скачать Sphinx:
Обратите внимание, в download-листе Sphinx есть пункт "MySQL 5.0.45 with SphinxSE 0.9.8" и из ссылки "mysql-5.0.45-sphinxse-0.9.8-win32.zip" следует что это только для Win32.
Теперь, разархивируем:
# tar -xzf mysql-5.1.34.tar.gz # tar -xzf sphinx-0.9.8.1.tar.gz
Скопируем сорцы SphinxSE в каталог распакованного нами MySQL:
# cp -R sphinx-0.9.8.1/mysqlse mysql-5.1.34/storage/sphinx
Запускаем "autorun.sh" для пересборки сорцов:
# cd mysql-5.1.34 # sh BUILD/autorun.sh
Установим дополнительные движки, в том числе и Sphinx:
# ./configure --with-plugins=sphinx,innobase,archive,blackhole # make && make install
Запускаем MySQL:
# /usr/local/etc/rc.d/mysql-server start
Войдем в MySQL-консоль и посмотрим какие есть у нас движки:
mysql> show engines; +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | SPHINX | YES | Sphinx storage engine 0.9.8 | NO | NO | NO | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | +------------+---------+----------------------------------------------------------------+--------------+------+------------+
Движок мы установили, теперь попробуем его использовать!
Использование SphinxSE
Для примера продолжим работать с индексом "adw0rd_wp", который мы создали в прошлой статье про Sphinx.
Для начала создадим таблицу:
CREATE TABLE `test_sphinx` ( `id` INTEGER NOT NULL, `weight` INTEGER NOT NULL, `query` VARCHAR(3072) NOT NULL, `group_id` INTEGER, INDEX(`query`) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:3312/adw0rd_wp";
Теперь проверим выборку по индексу "adw0rd_wp":
mysql> SELECT * FROM `test_sphinx` WHERE `query` = 'sphinx'; +------+--------+--------+----------+ | id | weight | query | group_id | +------+--------+--------+----------+ | 3366 | 2 | sphinx | 0 | | 3341 | 1 | sphinx | 0 | | 3368 | 1 | sphinx | 0 | +------+--------+--------+----------+ 3 rows in set (0.12 sec)
Где, в "query" можно написать искомую фразу, а так же дополнительные параметры поиска, например "mode", "sort" или указать индексы:
... WHERE query='test;mode=any'; ... WHERE query='test;sort=attr_asc:group_id'; ... WHERE query='test;index=test1,test2,test3;';
Результаты сопоставимы с предыдущим поиском через API: . Более подробно по использованию SphinxSE тут:

Комментарии
Обратите внимание, в download-листе Sphinx есть пункт «MySQL 5.0.45 with SphinxSE 0.9.8» и из ссылки «mysql-5.0.45-sphinxse-0.9.8-win32.zip» следует что это только для Win32.
какую версию мне лучше всего скачать под windows 7 x64 ?
Не знаю, не пользуюсь w7
жаль что процесс переноса на данную фичю еще довольно извращен
Удобно, но пока мало информации в интеренет по данной фиче. Сравнение производительности произвести бы, как API и QL:
http://sphinxsearch.com/blog/2010/04/25/sphinxapi-vs-sphinxql-benchmark/
Gray, ну тогда надо попросить Андрея чтобы сравнил, напишите туда каммент
address надо заменить на listen
вы это к чему?
ой немного не туда)
http://adw0rd.ru/2009/sphinxsearch/
вот тут address устарело в конфиге
Arvitaly, ну думаю статью то не надо менять из-за этого, много чего меняется :)
хотя сноску напишу рядом, спасибо что заметили
может заодно mariadb с портов вытащить ? там есть транзактивный MyISAM (Aria)
Оставьте свой комментарий