Движок 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 искомая комбинация