Sphinx и MySQL. Установка и использование движка SphinxSE
Базы данных, Операционные системы 26.06.2009
В продолжение темы о Sphinx, расскажу о , это движок для 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 http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.34.tar.gz
Скачать 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 sphinx-0.9.8.1.tar.gz
Скопируем сорцы SphinxSE в каталог распакованного нами MySQL:
Запускаем «autorun.sh» для пересборки сорцов:
# sh BUILD/autorun.sh
Установим дополнительные движки, в том числе и Sphinx:
# make && make install
Запускаем MySQL:
Войдем в MySQL-консоль и посмотрим какие есть у нас движки:
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| 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.
Для начала создадим таблицу:
(
`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»:
+------+--------+--------+----------+
| 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;sort=attr_asc:group_id';
... WHERE query='test;index=test1,test2,test3;';
Результаты сопоставимы с предыдущим поиском через API: http://demo.adw0rd.ru/sphinxsearch/?s=sphinx. Более подробно по использованию 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:
Gray, ну тогда надо попросить Андрея чтобы сравнил, напишите туда каммент
address надо заменить на listen
вы это к чему?
ой немного не туда)
adw0rd.ru/2009/sphinxsearch/
вот тут address устарело в конфиге
Arvitaly, ну думаю статью то не надо менять из-за этого, много чего меняется :)
хотя сноску напишу рядом, спасибо что заметили
может заодно mariadb с портов вытащить ? там есть транзактивный MyISAM (Aria)
[...] Во всех версия появилась возможность создавать таблицу в MySQL 5.x с движком SPHINX (Sphinx storage engine), т.е. появилась возможность обращаться к данным поискового индекса через SQL запросы к БД MySQl, более подробно тут [...]