Установка и настройка sphinx.
Sphinx – поисковая машина. Абсолютно бесплатная. Sphinx достаточно активно используют некоторые вебмастера при создании своих сайтов. Установка из портов достаточно проста.
cd /usr/ports/textproc/sphinxsearch make install clean
Перед сборкой появляется небольшой диалог опций.
┌────────────────────────────────────────────────────────────────────┐ │ Options for sphinxsearch 0.9.9 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [X] MYSQL MySQL support │ │ │ │ [ ] PGSQL PostgreSQL support │ │ │ │ [X] ICONV Iconv support │ │ │ │ [X] OPTIMIZED_CFLAGS Use compiler optimization (-O3) │ │ │ │ [X] ID64 use 64-bit document and word IDs │ │ │ │ [ ] UNIXODBC unixODBC support │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘
Опции обеспечивают индексацию большого количества документов(ID64 позволяет пронумеровать большое число файлов), находящихся в базах MySQL, ICONV обеспечивает поддержку любых текстов в любых раскладках(это оптимистическое заявление).
Теперь переходим к настройке.
Sphinx состоит из 2-х компонент, из поисковика searchd и индексатора indexer.
То есть идея такая, индексатор набивает в поисковый кеш все со страниц или из базы, а к поисковику уже идут запросы на поиск, он ищет по этому поисковому кешу.
Настройка в принципе сводится к тому, что бы описать источники для индексатора.
К примеру для WordPress эта задача выглядит так(все настройки размещаются в конфигурационном файле /usr/local/etc/sphinx.conf):
source wordpress_src { # Настройки подключения к MySQL type = mysql sql_host = localhost sql_user = wordpress sql_pass = wordpress-123 sql_db = wordpress sql_port = 3306 # Базы хранятся в UTF-8, выставляем кодовую страницу sql_query_pre = SET NAMES utf8 sql_query_pre = SET CHARACTER SET utf8 # Это запросы на получение данных из базы sql_query = SELECT ID as post_id, post_title, post_content FROM wp_posts WHERE post_type = 'post' sql_query_info = SELECT * FROM wp_posts WHERE ID = $id #Тут можно поставить время задержки, между запросами. Что бы снизить нагрузку на базу. sql_ranged_throttle = 0 }
Далее в этом же файле настраиваются поисковый индекс:
index wordpress_idx { # Индексировать источник описанный ранее source = wordpress_src # Путь к файлам индекса path = /var/db/sphinxsearch/data/wordpress # Тип хранения индекса (none, inline, extern) docinfo = extern # Отключаем лочку памяти mlock = 0 # Использование английского и русского языка в поисковом потоке morphology = stem_enru # Минимальная длина индексируемого слова min_word_len = 2 # Используем кодировку UTF-8 charset_type = utf-8 # Допустимые символы в поисковом кеше charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F enable_star = 1 }
Для каждого источника, нужно будет описать свой индекс, ну и понятно сам источник. Некоторые создают поиск по комментариям, но мне кажется это перебор.
Теперь общие настройки, непосредственно индексатора и поисковика:
indexer { # Лимит используемой памяти mem_limit = 32M } searchd { # Описываем, где поисковик будет принимать запросы address = 127.0.0.1 port = 9312 # Лог работы log = /var/log/sphinxsearch/searchd.log # Лог запросов query_log = /var/log/sphinxsearch/sphinx-query.log # Время чтения данных. read_timeout = 5 # Максимальное кол-во обслуживающих подпроцессов max_children = 30 # Путь к pidу pid_file = /var/run/sphinxsearch/searchd.pid # Максимальное кол-во результатов max_matches = 1000 }
Остается чуть-чуть. Остается запустить поисковик, ну и сначала разрешить запуск:
echo 'sphinxsearch_enable="YES"' >>/etc/rc.conf /usr/local/etc/rc.d/sphinxsearch start
И настроить работу индексатора. Индексатор запускается через крон. Как и насколько часто его запускать, зависит только от самого сайта. То есть, если сайт обнавляется раз в неделю, запускать индексатор раз в 5 минут безсмысленно. Опять же если у вас описано несколько источников, один из которых обновляется часто, запускать индексатор на все источники безсмысленно.
Поэтому для первого запуска индексатора используем:
indexer --allИ потом в кроне, допустим раз в сутки в 0 часов
0 0 * * * /usr/local/bin/indexer --all --rotate
Если нужно индексировать отдельный соурс, то это выглядит так:
*/5 * * * * /usr/local/bin/indexer --rotate wordpress_idx
Ну в общем, остается прикрутить поисковую форму к сайту, на wordpress это просто установкой и настройкой плугина.




By alpha_Qu4z4r, 01.09.2010 @ 00:19
Полезный сайтец, неплохое описалово. Спасибо.
Есть вопросик: как настроить сфинкча для индексации чужих сайтов? Нужно сделать что-то вроже локального гугла для сайтов пользователей локалки, понятное дело, многие их них не имеют внешнего адреса чтобы быть проиндекированными гуглом, жа и посетители не всегда оплачивают нтернет, но жоступ к локальным сайтам имеют всегда. Вот и хочется сделать эдакий поискрвик по сайтам локалки. Пробовал ковырять его с пол года или гож назад, но так и не получилось. Был бы рад подсказке, да и может кому еще пригодилось бы.