Починаючи з версії 0.9.2 з'явилася альтернатива у вигляді повнотекстового пошуку для модуля globalsearch.
На тестах поводиться набагато швидше, ніж jQuery autocomplete, який використовується в поточній реалізації.
Плюс має величезну гнучкість при подальшому використанні.
Disclaimer:
Звісно ж, само собою зрозуміло виконання всіх команд від рута.
Хочете від непривілейованого користувача - внесіть відповідні зміни в конфігурацію.
У 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 немає.
Якщо ви хочете додати кастомний індекс для пошуку - потрібно дві речі:
Тестував на FreeBSD 14.0, 13.3, 13.2
# 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
# /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all
# /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
У разі якщо ви використовували Debianstaller, як нормальна людина, - робити вам узагалі нічого не потрібно. Усе вже встановлено та налаштовано. Просто додайте у ваш crontab індексацію, наприклад так:
*/30 * * * * /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate
і увімкніть опцію
SPHINX_SEARCH_ENABLED=1
Усе, більше на Debian Linux робити нічого не потрібно. Усе запрацює саме по собі.
Ви можете подумати, що такого роду інформація чутлива і ви не хотіли б нею ділиться зі сторонніми? Власне кілька слів про безпеку.
Оскільки в базовому варіанті не передбачена аутентифікація - то варто обмежити доступність демона директивою listen в sphinx.conf.
Або ж обмежити доступ до нього фаєрволом.
Так само хорошим тоном буде створити окремого юзера в MySQL для пошуку і не ходити під рутовим логіном і паролем.