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

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


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

sphinx

Це стара версія документу!


Використання SphinxSearch як альтернативного пошукового движка для глобального пошуку


Починаючи з версії 0.9.2 з'явилася альтернатива у вигляді повнотекстового пошуку для модуля globalsearch.

На тестах поводиться набагато швидше, ніж jQuery autocomplete, який використовується в поточній реалізації. Плюс має величезну гнучкість при подальшому використанні.

Disclaimer:
Звісно ж, само собою зрозуміло виконання всіх команд від рута.

Хочете від непривілейованого користувача - внесіть відповідні зміни в конфігурацію.

Увімкнення SphinxSearch

У alter.ini:

Опція вмикає альтернативний глобальний пошук на базі SphinxSearch.

SPHINX_SEARCH_ENABLED=0

Хост зі 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 немає.
Якщо ви хочете додати кастомний індекс для пошуку - потрібно дві речі:

  1. Створити новий індекс у SphinxSearch + пере індексація.
  2. Додати ваш індекс в опцію SPHINX_SEARCH_INDEXES.

Встановлення на FreeBSD

Тестував на FreeBSD 13.1, 13.0, 12.3\

# 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`"

Установка на Debian GNU/Linux

В случае если вы использовали Debianstaller, как нормальный человек - делать вам вообще ничего не нужно. Все уже установлено и настроено. Просто добавьте в ваш crontab индексацию, например так:

*/30 * * * *       /opt/sphinx/bin/indexer --config /opt/sphinx/etc/sphinx.conf --all --rotate

и включите опцию

SPHINX_SEARCH_ENABLED=1

Все, больше на Debian Linux делать ничего не нужно. Все заработает само по себе.

Обновление индексов

В 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

Безопасность

Вы можете подумать что данного рода информация чувствительная и вы не хотели бы ей делится с посторонними? Собственно пара слов о безопасности.
Так как в базовом варианте не предусмотрена аутентификация - то стоит ограничить доступность демона директивой listen в sphinx.conf.
Либо же ограничить доступ к нему фаерволом.
Так же хорошим тоном будет создать отдельного юзера в MySQL для поиска и не ходить под рутовым логином и паролем.

sphinx.1686998963.txt.gz · Востаннє змінено: 2023/06/17 13:49 повз skybetik