Использование системы полнотекстового поиска Sphinx

В данной статье мы расскажем что такое Sphinx, его особенности и примеры использования.

Что такое Sphinx?

Sphinx является некоммерческим проектом с открытым исходным кодом, разрабатываемым более 10 лет, автором которого является Андрей Аксенов.

Sphinx (англ. SQL Phrase Index) — система полнотекстового поиска, отличительной особенностью которого является высокая скорость индексации и поиска, а также интеграция с существующими СУБД (MySQL, PostgreSQL) и API для распространённых языков веб-программирования (официально поддерживаются PHP, Python, Java, также существуют реализованные сообществом API для Perl, Ruby, .NET и C++).

Использование Sphinx значительно повышает скорость поиска и снижает затраты ресурсов. Основные возможности Sphinx:

  • высокая скорость индексации (до 10-15 МБ/с на каждое процессорное ядро);
  • высокая скорость поиска (до 150—250 запросов в секунду на каждое процессорное ядро с 1 000 000 документов);
  • высокая масштабируемость (крупнейший известный кластер индексирует до 3 000 000 000 документов и поддерживает более 50 миллионов запросов в день);
  • поддержка распределенного поиска;
  • поддержка нескольких полей полнотекстового поиска в документе (до 32 по умолчанию);
  • поддержка нескольких дополнительных атрибутов для каждого документа (то есть группы, временные метки и т. д.);
  • поддержка стоп-слов;
  • поддержка однобайтовых кодировок и UTF-8;
  • поддержка морфологического поиска — имеются встроенные модули для английского, русского и чешского языков; доступны модули для французского, испанского, португальского, итальянского, румынского, немецкого, голландского, шведского, норвежского, датского, финского, венгерского языков;
  • нативная поддержка MySQL (всех типов таблиц, в том числе MyISAM, InnoDB, NDB);
  • нативная поддержка PostgreSQL;
  • поддержка ODBC совместимых баз данных (MS SQL, Oracle и т. д.).

Описание установки поисковой системы Sphinx можно найти в официальной документации - sphinxsearch.com.

Использование Sphinx на хостинге

В личном кабинете аккаунта (в разделе Сервисы) Sphinx можно установить в пару кликов мышки.

микросервис sphinx

Перед включением есть возможность подобрать оптимальный тариф, в зависимости от примерного количества индексируемых данных, от 300мб до 5 гигабайт.
Квота устанавливается на оперативную память, доступную для использования сервисом Sphinx.

тарифы

После включения сервиса появятся два подраздела - "Индексация" и "Поисковый сервер".
Sphinx условно состоит из двух ключевых элементов - построение индексов для данных и поисковая машина по этим индексам.
В разделе "Индексация" как раз настраивается конфигурация Sphinx (вкладка "Редактор конфигурации"), то есть правила описывающие с какими данными и как должен работать Sphinx (примеры конфигураций мы рассмотрим чуть позже).

редактор конфигурации

Стоит отдельно отметить подпункт меню "Управления индексами".
В нем отображаются все добавленные на текущий момент индексы, их статус индексации:

тарифы

Статус автообновления индексов:

тарифы

Автообновление индекса по сути является крон заданием, которое запускает переиндексацию.
По умолчанию для всех индексов включено автообновление, с периодичностью в 15 минут.
Можно указать свою периодичность обновления индекса:

тарифы

При большом количестве индексов, для удобства, можно воспользоваться мультиредактированием:

sphinx cron

При необходимости Вы можете подключать собственные словари. Для этого их необходимо разместить в каталогe .service/sphinx/service-account___sphinx_base/static_data/conf/dict.

Путь указан от корневого каталога учётной записи. В приведённом примере необходимо заменить account на Ваш логин, base — на суффикс имени базы данных (часть имени после символа "_")
После этого через редактор конфигурации к опции "morphology" добавьте значение "lemmatize_ru" или "lemmatize_ru_all". При указании "lemmatize_ru_all" индексироваться будут все нормальные формы слова, если их несколько.

Обратите внимание!
Код языка зависит от языка словаря, например, если добавляются англоязычные словари, нужно добавить "lemmatize_en" или "lemmatize_en_all".

Вкладка "Поисковый сервер" позволяет работать с самой поисковой системой (searchd).
Есть возможность включить или выключить поисковый демон. Выполнить быстрый запрос к индексированным данным с помощью SphinxQL.
Увидеть список последних выполненных заданий по индексации.

статус индексации

Посмотреть логи:

логи searchd

Или же открыть внешний доступ к сервису.

открытие внешнего доступа

После включения необходимо добавить хотя бы один IP адрес, которому будет разрешено подключение к Sphinx.

открытие внешнего доступа

При подключении к Sphinx удаленно следует использовать данные которые указаны на странице.
Хост для подключения - sphinx.ваш_логин.beget.hosting

54729 - порт для подключения к Sphinx
55456 - порт для подключения к SphinxQL

Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".

Теги:

18
10603