====== Використання 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 для пошуку і не ходити під рутовим логіном і паролем.