bsd$ sudo pkg install -y sphinxsearch
Установка актуальной версии вызвала конфликт с mysql55-client, пришлось обновить MySQL до версии 5.6 и переписать в index.php подключение к базе данных через mysqli
Кроме того, sphinxsearch запускался с предупреждением о том, что необходимо включить опцию ID64, пришлось собирать из портов
bsd$ whereis -s sphinxsearch
sphinxsearch: /usr/ports/textproc/sphinxsearch
bsd$ sudo make -C /usr/ports/textproc/sphinxsearch config
bsd$ sudo make -C /usr/ports/textproc/sphinxsearch -D BATCH install clean
bsd$ rehash
Для включения леммонайзера потребуются словари, взять их можно с официального сайта
bsd$ sudo mkdir -p /usr/local/share/sphinx/dicts
bsd$ cd /usr/local/share/sphinx/dicts
bsd$ sudo wget http://sphinxsearch.com/files/dicts/ru.pak
bsd$ sudo wget http://sphinxsearch.com/files/dicts/en.pak
bsd$ sudo chown _sphinx:_sphinx /usr/local/share/sphinx
В базе с кодировкой koi8r_general_ci поиск по русским словам наладить не получилось, пришлось переделать на utf8_general_ci (см. файл конфигурации ниже)
bsd$ grep -ve '^[[:space:]]*\(#\|$\)' /usr/local/etc/sphinx.conf
source freebsd_howto
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, content, href FROM documents
sql_attr_string = href
sql_attr_string = title
}
source freebsd_howto-throttled : freebsd_howto
{
sql_ranged_throttle = 100
}
index freebsd_howto
{
source = freebsd_howto
path = /var/db/sphinxsearch/data/freebsd_howto
morphology = lemmatize_ru,lemmatize_en
min_word_len = 3
html_strip = 1
}
index freebsd_howto_stemmed : freebsd_howto
{
path = /var/db/sphinxsearch/data/stemmed
morphology = lemmatize_ru, lemmatize_en
}
searchd
{
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/sphinx-query.log
collation_server = utf8_general_ci
collation_libc_locale = ru_RU.UTF-8
}
common
{
lemmatizer_base = /usr/local/share/sphinx/dicts
}
Для запуска sphinxsearch требуется предварительно создать директории для ведения логов и файлов индексов
bsd$ sudo mkdir -p /var/db/sphinxsearch/data
bsd$ sudo chown _sphinx:_sphinx /var/db/sphinxsearch/data
bsd$ sudo mkdir -p /var/log/sphinxsearch
bsd$ sudo chown _sphinx:_sphinx /var/log/sphinxsearch
bsd$ sudo mkdir -p /var/run/sphinxsearch
bsd$ sudo chown _sphinx:_sphinx /var/run/sphinxsearch
Теперь можно создать файлы индексов и запустить даемона
bsd$ sudo indexer --all --config /usr/local/etc/sphinx.conf
bsd$ echo 'sphinxsearch_enable="YES"' | sudo tee -a /etc/rc.conf
sphinxsearch_enable="YES"
bsd$ sudo /usr/local/etc/rc.d/sphinxsearch start
Запущенный сервис обязан слушать входящие подключения
bsd$ sockstat -4l | egrep '[s]phinx'
_sphinx | searchd | 1275 | 7 | tcp4 | *:9312 | *:* |
_sphinx | searchd | 1275 | 8 | tcp4 | *:9306 | *:* |
При запущенном searchd обновление индексов производить с ключом --rotate
bsd$ sudo indexer --all --config /usr/local/etc/sphinx.conf --rotate
Листинг index.php
Листинг search.php
Результаты поиска
'); while ( $row = mysqli_fetch_assoc( $result ) ){ echo ''; } mysql_close($link); echo('