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

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


Сайдбар

Розділи

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

FAQ



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

sphinx

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


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

  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.txt · Востаннє змінено: 2023/12/06 17:52 повз nightfly