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

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


Сайдбар

Розділи

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

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

Автозапуск

Добавим в /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.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1