Движок Sphinx — найди быстрее искомое
Доброго времени суток друзья.
Хочу поделиться с Вами настройкой и установкой поисковой системы под названием Sphinx (Sphinxsearch). Немного о нем, что это за зверь-пирамида, поисковый движок и зачем он и с чем его лопают кушают.
Sphinx (англ.SQL Phrase Index) — система полнотекстового поиска, разработанная Андреем Аксеновым и распространяемая по лицензии GNU GPL. Отличительной особенностью является высокая скорость индексации и поиска, а также интеграция с существующими СУБД (MySQL, PostgreSQL) и API для распространённых языков веб-программирования (официально поддерживаются PHP, Python, Java; существуют реализованные сообществом API для Perl, Ruby,.NET[1] и C++).
Возможности поискового двига:
- Высокая скорость поиска (до 150—250 запросов в секунду на каждое процессорное ядро с 1 000 000 документов);
- Высокая масштабируемость (крупнейший известный кластер индексирует до 3 000 000 000 документов и поддерживает более 50 миллионов запросов в день);
- Поддержка распределенного поиска;
- Поддержка морфологического поиска — имеются встроенные модули для английского, русского и чешского языков; доступны модули для французского, испанского, португальского, итальянского, румынского, немецкого, голландского, шведского, норвежского, датского, финского, венгерского языков и много чего еще.
Для детальности можете посетить оффсайт Sphinx
Ну а теперь приступим к настройке, предполагается что он у Вас уже стоит:
До начала поиска надо создать конфигурационный файл, проиндексировать информацию и указать что и как индексировать.
1) Конфигурация движка следующая (у Вас будет другая, эта будет для примера) файл sphinx.conf:
source name { type = mysql sql_host = Укажите хост вашей БД sql_user = Укажите пользователя вашей БД sql_pass = Укажите пароль вашей БД sql_db = Укажите наименование вашей БД sql_port = 3306 sql_query_pre = SET NAMES utf8 sql_query = SELECT id, name FROM profiles sql_attr_uint = id sql_query_info = SELECT name FROM profiles WHERE id=$id } index name { source = street_name path = /var/lib/sphinxsearch/data/name morphology = stem_ru min_word_len = 1 charset_type = utf-8 } searchd { listen = 127.0.0.1:9306:mysql41 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log pid_file = /var/run/sphinxsearch/searchd.pid read_timeout = 5 max_children = 30 max_matches = 1000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 }
2) Добавить данную конфигурацию в файл /etc/sphinxsearch/sphinx.conf (если такого не существует, значит Sphinx у вас не установлен).
2.1.) Установить Sphinx будет быстрее настройки :), выполните команду ниже:
sudo apt-get install sphinxsearch
3) Найти и изменить директивы:
sql_host = Укажите хост вашей БД
sql_user = Укажите пользователя вашей БД
sql_pass = Укажите пароль вашей БД
sql_db = Укажите наименование вашей БД
4) Проиндексируем нашу БД, для этого выполним команду(под суперпользователем):
# indexer --config /etc/sphinxsearch/sphinx.conf --all
Примечание: если после выполнения команды у Вас вылетела ошибка данного плана:
using config file ‘/etc/sphinxsearch/sphinx.conf’…
indexing index ‘ecm3’…
FATAL: failed to lock /var/lib/sphinxsearch/data/ecm3.spl: Resource temporarily unavailable, will not index. Try —rotate option.
Ответ: Ваш проект уже проиндексирован и не требует индексации!
5) Для поиска в консоли есть утилита «search»:
# search --config /etc/sphinxsearch/sphinx.conf искомая комбинация