Користувальницькькі налаштування

Налаштування сайту


sphinx

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
sphinx [2018/08/25 11:28]
sphinx [2023/12/06 17:52] (поточний)
nightfly
Рядок 1: Рядок 1:
 +====== Використання 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 13.1, 13.0, 12.3\\
 +
 +  * Завантажуємо бінарники з [[http://sphinxsearch.com/downloads/current/|офіційного сайту розробника SphinxSearch]].
 +<code>
 +# 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
 +</code>
 +  * Копіюємо і правимо конфіг. Цікавить переважно секція підключення до БД.
 +<code>
 +# cp /usr/local/www/apache24/data/billing/docs/sphinxsearch/sphinx3.conf /opt/sphinx/etc/sphinx.conf
 +</code>
 +
 +<code>
 +# vi /opt/sphinx/etc/sphinx.conf
 +</code>
 +
 +<file sphinx.conf>
 +        sql_host                = localhost
 +        sql_user                = root
 +        sql_pass                = rootpassword
 +        sql_db                  = stg
 +</file>
 +
 +  * Запускаємо indexer.
 +<code>
 +# /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all
 +</code>
 +
 +  * Після чого запускаємо searchd.
 +<code>
 +# /opt/sphinx/bin/searchd --config /opt/sphinx/etc/sphinx.conf
 +</code>
 +* Правимо alter.ini під свої реалії. За дефолтом приймається, що sphinx запущено з білінгом на одному сервері, але цілком замінивши ip-адресу на потрібний - можете розгорнути і на хості, який стоїть поруч, \ віртуалці. Важливо що USER, PASSWORD, DB - за дефолтом порожні. Це не страшно. Це не означає "вигадай сам". Так задумано.
 +<file alter.ini>
 +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`"
 +</file>
 +
 +
 +===== Встановлення на Debian GNU/Linux =====
 +
 +У разі якщо ви використовували [[setupdebianstaller|Debianstaller]], як нормальна людина, - робити вам узагалі нічого не потрібно. Усе вже встановлено та налаштовано. Просто додайте у ваш crontab індексацію, наприклад так:
 +<code>
 +*/30 * * * *       /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate
 +</code>
 +
 +і увімкніть опцію
 +<code ini>
 +SPHINX_SEARCH_ENABLED=1
 +</code>
 +
 +Усе, більше на [[setupdebianstaller|Debian Linux]] робити нічого не потрібно. Усе запрацює саме по собі.
 +
 +===== Оновлення індексів =====
 +У crontab -e:
 +<file crontab>
 +*/5 * * * *       /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate
 +</file>
 +
 +===== Автозапуск =====
 +Додамо у /usr/local/etc/rc.d/billing у секцію start_cmd:
 +
 +<code>
 +       /opt/sphinx/bin/searchd --config /opt/sphinx/etc/sphinx.conf
 +       echo "SphinxSearch started"
 +</code>
 +
 +Що б вийшло наступне:
 +
 +<file /etc/rc.d/billing>
 +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"
 +}
 +</file>
 +
 +===== Ротація логів =====
 +Додамо такі правила у /etc/newsyslog.conf
 +
 +<file 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
 +</file>
 +
 +І перезапустимо newsyslog:
 +<code>
 +# service newsyslog restart
 +</code>
 +
 +===== Безпека =====
 +
 +Ви можете подумати, що такого роду інформація чутлива і ви не хотіли б нею ділиться зі сторонніми? Власне кілька слів про безпеку. \\
 +Оскільки в базовому варіанті не передбачена аутентифікація - то варто обмежити доступність демона директивою listen в sphinx.conf. \\
 +Або ж обмежити доступ до нього фаєрволом. \\
 +Так само хорошим тоном буде створити окремого юзера в MySQL для пошуку і не ходити під рутовим логіном і паролем.