26 июня 2009 г. FreeBSD MySQL SphinxSearch Поисковые системы

Sphinx и MySQL. Установка и использование движка SphinxSE

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 http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
# fetch http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.34.tar.gz
Скачать MySQL: http://downloads.mysql.com/archives.php?p=mysql-5.1&o=other
Скачать Sphinx: http://www.sphinxsearch.com/downloads.html
Обратите внимание, в 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: http://demo.adw0rd.ru/sphinxsearch/?s=sphinx. Более подробно по использованию SphinxSE тут: http://www.sphinxsearch.com/docs/current.html#sphinxse-using

Комментарии

Обратите внимание, в 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)

Оставьте свой комментарий

Markdown