Устанавливаем утилиту sphinx из коллекции портов /usr/ports/textproc/sphinxsearch
# cd /usr/ports/textproc/sphinxsearch
# make config
При этом у нас должны быть обязательно включены опции
• «mysql», если вы пользуетесь данной СУБД и хотите работать с данными непосредственно из Sphinx
• «iconv» для поддержки разных кодировок
Перед запуском создадим конфигурационный файл, вернее переименуем имеющийся и укажем в нём необходимые параметры для подключения к таблицам БД, в которой следует производить поиск
source adw0rd_wp
{
# Параметры подключения к БД
type = mysql
sql_host = localhost
sql_user = user
sql_pass = password
sql_db = database_name
sql_port = 3306
# Установим кодировку для работы с БД
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'
# Запрос доп. информации для вывода результата (используется утилитой "search")
sql_query_info = SELECT * FROM wp_posts WHERE ID = $id
# Время простоя (sleep) перед посылкой запросов серверу (предназначен для разгрузки сервера БД)
# Если установите "= 1000", то засыпание будет длится 1 секунду
sql_ranged_throttle = 0
}
index adw0rd_wp
{
# Использовать соответствующий source-блок настроек при индексации
source = adw0rd_wp
# Путь до файлов индекса
path = /home/sphinx/data/adw0rd_wp
# Способ хранения индекса (none, inline, extern)
# Подробнее http://www.sphinxsearch.com/docs/manual-0.9.8.html#conf-docinfo
docinfo = extern
# Memory lock (http://www.sphinxsearch.com/docs/manual-0.9.8.html#conf-mlock)
mlock = 0
# Использование английского и русского стемминга
morphology = stem_enru
# Минимальная длина индексируемого слова
min_word_len = 2
# Установка используемой кодировки
charset_type = utf-8
# Таблица символов (http://www.sphinxsearch.com/docs/manual-0.9.8.html#conf-charset-table)
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# Минимальная длина инфикса (префикс в том числе)
min_infix_len = 2
# Использовать оператор усечения "*" (http://www.sphinxsearch.com/docs/manual-0.9.8.html#conf-enable-star)
enable_star = 1
}
indexer
{
# Максимальный лимит используемой памяти RAM
mem_limit = 32M
}
searchd
{
# Адрес сервера
address = 127.0.0.1
# Порт
port = 3312
# Лог
log = /home/sphinx/log/searchd.log
# Лог запросов
query_log = /home/sphinx/log/query.log
# Таймаут на соединение с сервером (в секундах). При истечении времени происходит обрыв
read_timeout = 5
# <a style="text-decoration: none; color:inherit" title="" id="95 href=http://www.stroites.ru">Максимальное</a> кол-во потомков от процесса
max_children = 30
# Путь до pid-файла
pid_file = /home/sphinx/log/searchd.pid
# Максимальное кол-во результатов выдачи
max_matches = 1000
}
Подробная документация приведена здесь: http://www.sphinxsearch.com/docs/.
Для использования утилиты sphinx в системе FreeBSD вам придётся создать пользователя с одноимённым названием, разместить в каталоге пользователя конфигурационный файл, создать каталоги дата в котором будут храниться файлы данных утилиты sphinx и каталог log в котором необходимо создать файлы логов вот и всё, а теперь проиндексируем нашу БД, для этого введем команду
# indexer --config /home/sphinx/sphinx.conf --all
Далее для обновления текущего индекса используйте «--rotate», он добавит к созданному индексу новые данные, а измененные соответственно изменит
# indexer --config /home/sphinx/sphinx.conf --rotate
Мы можем протестировать работу поискового сервера в консоли, для этого воспльзуемся утилитой
# search --config /home/sphinx/sphinx.conf
искомая комбинация
Далее для автоматического старта поискового сервера на основе утилиты sphinx при старте системы в конфигурационном файле /etc/rc.conf укажем параметр
sphinxsearch_enable=”YES”
Запускаем поисковой сервер
# searchd --config /home/sphinx/sphinx.conf
Для использования Sphinx API в наших скриптах необходимо подключить файл sphinxapi.php, он идет в поставке с дистрибутивом. /usr/ports/textproc/sph
inxsearch/work/sphinx-0.9.8.1/api/sphinxapi.php
Привожу скрипт для работы с проиндексируемыми данными поисковика, то есть для запросов искомых слов и вывода результатов поиска!
Sphinx search for Wordpress
<form method="get">
<input name="s" size="40" value="" />
<input type="submit" value="Искать!" />
</form>
2)
{
// Подключаем sphinx-api
require_once ("sphinxapi.php");
// Искомая комбинация
$string = $_GET['s'];
// Создаем объект клиента для Sphinx API
$sphinx = new SphinxClient();
// Подсоединяемся к Sphinx-серверу
$sphinx->SetServer('localhost', 3312);
// Совпадение по любому слову
$sphinx->SetMatchMode(SPH_MATCH_ANY);
// Результаты сортировать по релевантности
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
// Задаем полям веса (для подсчета релевантности)
$sphinx->SetFieldWeights(array ('post_title' => 20, 'post_content' => 10));
// Результат по запросу (* - использование всех индексов)
$result = $sphinx->Query($string, '*');
// Если есть результаты поиска, то
if ($result && isset($result['matches']))
{
// Соединяемся с БД
mysql_connect('localhost', 'user', 'password');
mysql_select_db('adw0rd_wp');
// Устанавливаем кодировки
mysql_query('SET NAMES utf8');
mysql_query('SET CHARACTER SET utf8');
// Получаем массив ID постов блога
$ids = array_keys($result['matches']);
// Выводим посты отсортированные по релевантности
$id_list = implode(',', $ids);
$sql = '
SELECT `ID`, `post_title`, `post_content`
FROM `wp_posts`
WHERE `ID` IN ('.$id_list.')
ORDER BY FIELD(`ID`, '.$id_list.')';
$resource = mysql_query($sql);
// Выводим результаты поиска
echo '<ol>';
while ($result = mysql_fetch_assoc($resource)) {
echo '<li /><span>[url=http://adw0rd.ru/?p=]'.$result['post_title'].'[/url]</span><div>'.mb_substr(htmlspecialchars($result['post_content']), 0, 400).'</div>';
}
echo '</ol>';
}
}
?>
Будет полезным разместить копию конфигурационного файла sphinx в каталоге программ /usr/local/etc , в дальнейшем это поможет нам упростить его эксплуатацию, итак скопируем sphinx.conf из домашнего каталога /home/sphinx в каталог /usr/local/etc .
Для дальнейшей реиндексации базы данных sphinx нам потребуется останавливать работу sphinx, для этого введем комманду
searchd --config /usr/local/etc/sphinx.conf --stop
далее команда
indexer --config /usr/local/etc/sphinx.conf --all
далее запускаем sphinx
searchd --config /usr/local/etc/sphinx.conf
Соответственно рекомендуем добавить эти три волшебные комманды в крон и дергать их один раз в сутки по расписанию ночью, мне кажется этого будет достаточно.