====== Використання SphinxSearch як альтернативного пошукового рушія для глобального пошуку ======
{{ :sphinxlogo.png|}}
\\
Починаючи з версії 0.9.2 з'явилася альтернатива у вигляді повнотекстового пошуку для модуля globalsearch. \\
\\
На тестах поводиться набагато швидше, ніж jQuery autocomplete, який використовується в поточній реалізації.
Плюс має величезну гнучкість при подальшому використанні. \\
Disclaimer: \\
//Звісно ж, само собою зрозуміло виконання всіх команд від рута.// \\ \\
//Хочете від непривілейованого користувача - внесіть відповідні зміни в конфігурацію.//
===== Увімкнення SphinxSearch =====
У alter.ini: \\ \\
Опція вмикає альтернативний глобальний пошук на базі SphinxSearch.
SPHINX_SEARCH_ENABLED=1
Хост зі SphinxSearch.
SPHINX_SEARCH_HOST="127.0.0.1"
Порт для підключення до SphinxSearch.
SPHINX_SEARCH_SQL_PORT="9306"
Ім'я користувача для підключення до SphinxSearch (за замовчуванням порожнє!).
SPHINX_SEARCH_USER=""
Пароль для підключення до SphinxSearch (за замовчуванням порожній!).
SPHINX_SEARCH_PASSWORD=""
Ім'я БД для підключення до SphinxSearch (за замовчуванням порожнє!).
SPHINX_SEARCH_DB=""
Імена індексів (полів), у яких здійснювати пошук у SphinxSearch. За замовчуванням contract,paymentid,macodt,macminus відключені. Для активації потрібно розкоментувати відповідні рядки в конфігураційному файлі й дочекатися пере індексування, тільки потім можна вмикати їх у цій опції.
;SPHINX_SEARCH_INDEXES="ip,mac,realname,login,fulladdress,mobile,phone"
Обмеження елементів у відповіді під час пошуку в SphinxSearch. Не варто задирати цей параметр, оскільки позначатиметься на поїданні ресурсів браузера javascript-ом.
;SPHINX_SEARCH_LIMIT=100
Додаткове сортування результатів
SPHINX_SEARCH_SORT="GROUP BY `id`,`title`"
\\ \\
Само собою потребує
GLOBALSEARCH_ENABLED=1
===== Масштабованість =====
Варто відзначити можливе горизонтальне розширення з будь-якими балансувальниками (хоча навряд чи стане в пригоді для подібних навантажень). \\
Теж саме про відмовостійкість. Будь-які варіанти від балансувальників з health check до VRRP. \\
\\
\\
Так само важливо розуміти, що жодних обмежень щодо пошуку з боку Ubilling немає. \\
Якщо ви хочете додати кастомний індекс для пошуку - потрібно дві речі:
- Створити новий індекс у SphinxSearch + пере індексація.
- Додати ваш індекс в опцію SPHINX_SEARCH_INDEXES.
===== Встановлення на FreeBSD =====
Тестував на FreeBSD 14.0, 13.3, 13.2\\
* Завантажуємо бінарники з [[http://sphinxsearch.com/downloads/current/|офіційного сайту розробника SphinxSearch]].
# mkdir /opt
# cd /opt
# fetch http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-freebsd-amd64.tar.gz
# tar zxvf sphinx-3.1.1-612d99f-freebsd-amd64.tar.gz
# mv sphinx-3.1.1 sphinx
# cd sphinx
# mkdir -p sphinxdata/logs
# touch sphinxdata/logs/searchd.log
# rm sphinxdata/searchd.state
* Копіюємо і правимо конфіг. Цікавить переважно секція підключення до БД.
# cp /usr/local/www/apache24/data/billing/docs/sphinxsearch/sphinx3.conf /opt/sphinx/etc/sphinx.conf
# vi /opt/sphinx/etc/sphinx.conf
sql_host = localhost
sql_user = root
sql_pass = rootpassword
sql_db = stg
* Запускаємо indexer.
# /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all
* Після чого запускаємо searchd.
# /opt/sphinx/bin/searchd --config /opt/sphinx/etc/sphinx.conf
* Правимо alter.ini під свої реалії. За дефолтом приймається, що sphinx запущено з білінгом на одному сервері, але цілком замінивши ip-адресу на потрібний - можете розгорнути і на хості, який стоїть поруч, \ віртуалці. Важливо що USER, PASSWORD, DB - за дефолтом порожні. Це не страшно. Це не означає "вигадай сам". Так задумано.
SPHINX_SEARCH_ENABLED=1
SPHINX_SEARCH_HOST="127.0.0.1"
SPHINX_SEARCH_SQL_PORT="9306"
SPHINX_SEARCH_USER=""
SPHINX_SEARCH_PASSWORD=""
SPHINX_SEARCH_DB=""
SPHINX_SEARCH_SORT="GROUP BY `id`,`title`"
===== Оновлення індексів =====
У crontab -e:
*/5 * * * * /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate
===== Автозапуск =====
Додамо у /usr/local/etc/rc.d/billing у секцію start_cmd:
/opt/sphinx/bin/searchd --config /opt/sphinx/etc/sphinx.conf
echo "SphinxSearch started"
Що б вийшло наступне:
start_cmd()
{
echo "Starting stargazer"
/usr/sbin/stargazer || echo "failed to start stargazer"
/usr/local/bandwidthd/bandwidthd
echo "Bandwidthd started"
/opt/sphinx/bin/searchd --config /opt/sphinx/etc/sphinx.conf
echo "SphinxSearch started"
}
===== Ротація логів =====
Додамо такі правила у /etc/newsyslog.conf
/opt/sphinx/sphinxdata/logs/query.log 600 5 100 * JC /opt/sphinx/sphinxdata/searchd.pid 30
/opt/sphinx/sphinxdata/logs/searchd.log 600 5 100 * JC /opt/sphinx/sphinxdata/searchd.pid 30
І перезапустимо newsyslog:
# service newsyslog restart
===== Встановлення на Debian GNU/Linux =====
У разі якщо ви використовували [[setupdebianstaller|Debianstaller]], як нормальна людина, - робити вам узагалі нічого не потрібно. Усе вже встановлено та налаштовано. Просто додайте у ваш crontab індексацію, наприклад так:
*/30 * * * * /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate
і увімкніть опцію
SPHINX_SEARCH_ENABLED=1
Усе, більше на [[setupdebianstaller|Debian Linux]] робити нічого не потрібно. Усе запрацює саме по собі.
===== Безпека =====
Ви можете подумати, що такого роду інформація чутлива і ви не хотіли б нею ділиться зі сторонніми? Власне кілька слів про безпеку. \\
Оскільки в базовому варіанті не передбачена аутентифікація - то варто обмежити доступність демона директивою listen в sphinx.conf. \\
Або ж обмежити доступ до нього фаєрволом. \\
Так само хорошим тоном буде створити окремого юзера в MySQL для пошуку і не ходити під рутовим логіном і паролем.