
Поиск на sphinx: установка и настройка
1) установка сервера
Установка в Centos
#yum install sphinx - поставит старую версию, поэтому:
rpm -ivh http://sphinxsearch.com/files/sphinx-2.0.6-1.rhel6.x86_64.rpm
Установка в Windows:
скачать архив с http://sphinxsearch.com/downloads/release/ и распаковать. Добавить путь к папке в PATH.
2) настройка
mcedit /etc/sphinx/sphinx.conf
Пример:
source test
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = test
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT code, concat(name,' ', code) as name, price, idGroup, descr, code \
FROM test where visible
sql_attr_uint = idGroup
sql_field_string = name
sql_field_string = descr
sql_attr_float = price
sql_field_string = code
#sql_attr_timestamp = date_added
# sql_query_info = SELECT * FROM documents WHERE id=$id
}
index test
{
source = test
path = /var/lib/sphinx/galeon
docinfo = extern
morphology = stem_ru
min_word_len = 1
html_strip = 1 #вырезать html
charset_type = utf-8
wordforms = /var/www/test.ru/wordforms.txt #синонимы
stopwords = /var/www/test.ru/stop.txt #стоп слова
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 127.0.0.1:9312
listen = 127.0.0.1:9306:mysql41
port = 3313
# address = 127.0.0.1
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
3) запустить
service searchd start
chkconfig searchd on
4) переиндексировать
searchd indexer --all --rotate
или
indexer --all --rotate
5) тест:
mysql -h 0 -P 9306
mysql> SELECT * FROM test1 WHERE MATCH('test');
протестировать поиск из командной строки:
/usr/local/sphinx/bin/search --config /usr/local/sphinx/etc/sphinx.conf test
Если запускается из командной строки и ищет:
php search.php
или perl search.pl
а из браузера пишет Failed to open connection to localhost:9312: Отказано в доступе... ConnectRetries exceed...
то надо отключить selinux в mcedit /etc/sysconfig/selinux
SELINUX=disabled
и перезагрузится
6) добавить переиндексацию в cron:
0 0 * * * root /usr/local/sphinx/bin/indexer --rotate --all --config /usr/local/sphinx/etc/sphinx.conf
7) стопслова и синонимы
Синонимы в текстом файле wordforms.txt задаются в виде синоним > слово, на которое надо его заменить без окончания:
кружек > кружк
ложек > ложк
вилок > вилк
вилочка > вилк
Стопслова в stop.txt:
для
в
с