Что такое Sphinx?
Sphinx (англ. SQL Phrase Index) – система полнотекстового поиска, разработанная Андреем Аксеновым и распространяемая по лицензии GNU GPL. Отличительной особенностью этого поискового движка является высокая скорость индексации и поиска, возможность использовать морфологический и полнотекстовый поиск.
Полнотекстовый поиск Sphinx доступен в продуктах «1С-Битрикс» с версии 14.0.0. Он позволяет сделать быстрым и качественным поиск на вашем сайте, снизить нагрузку на сервер, а также он полностью интегрирован с компонентами модуля “Поиск”.
Несмотря на то, что в документации к модулю "Поиск" начиная с версии v16.5.0 заявляется о поддержке Sphinx 2.2.10 - она работает исключительно для сайтов в кодировке UTF-8.
Настройка Sphinx
Для настройки необходимо зайти в административную панель сайта, затем перейти в меню "Настройки" -> "Настройки продукта" -> "Настройки модулей" -> "Поиск".

Затем перейти во вкладку "Морфология" и в выпадающем списке меню "Полнотекстовый поиск с помощью" выбрать "Sphinx".

Для своей работы Bitrix использует RT-индексы, то есть фактически запись осуществляется в два места одновременно – в базу данных и сервер полнотекстового поиска Sphinx, при этом сам Indexer (программа индексации из набора Sphinx) не обновляет индексы. Этот подход позволяет всегда осуществлять поиск по актуальной информации.
Необходимо скопировать конфигурационный файл, представленный на странице настройки:
#sphinx.conf
index bitrix
{
#main settings
type = rt
path = /var/lib/sphinxsearch/data/bitrix
docinfo = inline
#choose appropriate type of morphology to use
#morphology = lemmatize_ru_all, lemmatize_en_all, lemmatize_de_all, stem_enru
morphology = stem_enru, soundex
#these settings are used by bitrix:search.title component
dict = keywords
prefix_fields = title
infix_fields=
min_prefix_len = 2
enable_star = 1
#all fields must be defined exactly as followed
rt_field = title
rt_field = body
rt_attr_uint = module_id
rt_attr_string = module
rt_attr_uint = item_id
rt_attr_string = item
rt_attr_uint = param1_id
rt_attr_string = param1
rt_attr_uint = param2_id
rt_attr_string = param2
rt_attr_timestamp = date_change
rt_attr_timestamp = date_to
rt_attr_timestamp = date_from
rt_attr_uint = custom_rank
rt_attr_multi = tags
rt_attr_multi = right
rt_attr_multi = site
rt_attr_multi = param
#depends on settings of your site
# uncomment for single byte character set
charset_type = sbcs
# uncomment for UTF character set
#charset_type = utf-8
}При этом удалив из него строку infix_fields=. Сохранение изменений на данном этапе не требуется.
Далее необходимо настроить параметры Sphinx. Сделать это необходимо в панели управления хостингом.
Зайдите в раздел "Сервисы" -> "Sphinx". Выбираем необходимый тариф и включаем демон полнотекстового поиска:

После включения Sphinx переходим во вкладку "Индексация" -> "Редактор конфигурации", вставляем скопированное ранее содержимое конфигурационного файла (с удалением строки infix_fields=) и нажимаем "Сохранить":

Переходим на вкладку "Поисковый сервер" и включаем его.

После включения поискового сервера можно активировать опцию автоматического запуска. Для этого установите галочку «Запускать автоматически после перезагрузки» – в таком случае поисковый сервер будет запускаться автоматически после перезагрузки Sphinx.
Для завершения настройки необходимо вернуться в административную панель сайта во вкладку "Морфология" и нажать “Сохранить”.

После применения изменений появится сообщение о необходимости полностью проиндексировать сайт, нажимаем на "Переиндексировать сайт":

Попав на страницу индексации, снимаем галочку "Проиндексировать только измененные" и нажимаем "Переиндексировать":

Настройка полнотекстового поиска завершена! Проверить работу поиска можно на вашем сайте, а также в панели управления хостингом в разделе «Сервисы» -> «Sphinx» -> «Поисковый сервер», выполнив команду show index bitrix status.

Пример вывода:
Variable_name Value
index_type rt
indexed_documents 49
indexed_bytes 61317
ram_bytes 139645
disk_bytes 747
ram_chunk 133973
disk_chunks 0
mem_limit 134217728В данном выводе ключевым параметром является indexed_documents – он показывает количество проиндексированных документов. Если значение больше нуля, индекс успешно создан и поиск работает корректно.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.