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


Комментарии (11) на запись «Sphinx и MySQL. Установка и использование движка SphinxSE»

» Трекбеки скрыты, показать их?
  1. миха | 14.03.2010 в 18:23

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

  2. adw0rd | 14.03.2010 в 20:35

    Не знаю, не пользуюсь w7

  3. Pandora | 25.03.2010 в 00:28

    жаль что процесс переноса на данную фичю еще довольно извращен

  4. Gray | 20.05.2010 в 17:14

    Удобно, но пока мало информации в интеренет по данной фиче. Сравнение производительности произвести бы, как API и QL:

    sphinxsearch.com/blog/201...inxql-benchmark/

  5. adw0rd | 20.05.2010 в 21:43

    Gray, ну тогда надо попросить Андрея чтобы сравнил, напишите туда каммент

  6. Arvitaly | 21.10.2010 в 03:10

    address надо заменить на listen

  7. adw0rd | 21.10.2010 в 08:40

    вы это к чему?

  8. Arvitaly | 27.10.2010 в 13:13

    ой немного не туда)

    adw0rd.ru/2009/sphinxsearch/

    вот тут address устарело в конфиге

  9. adw0rd | 27.10.2010 в 22:09

    Arvitaly, ну думаю статью то не надо менять из-за этого, много чего меняется :)

    хотя сноску напишу рядом, спасибо что заметили

  10. Pandora | 16.01.2011 в 08:15

    может заодно mariadb с портов вытащить ? там есть транзактивный MyISAM (Aria)

  11. Работа с realtime индексами в поисковом движке Sphinx | 29.01.2012 в 20:58

    [...] Во всех версия появилась возможность создавать таблицу в MySQL 5.x с движком SPHINX (Sphinx storage engine), т.е. появилась возможность обращаться к данным поискового индекса через SQL запросы к БД MySQl, более подробно тут [...]

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