Show/Hide Toolbars

Руководство по тех. обслуживанию

Подключение поиска Sphinx

Sphinx – стороннее приложение, предназначенное для обработки поисковых запросов (полнотекстовых и неполнотекстовых). Sphinx поддерживает развитые возможности поиска, включая ранжирование и стемминг (выделение основы слова) для русского и английского языков. Отличительной особенностью Sphinx является высокая скорость индексации и поиска, а также способность распараллеливать процессы и эффективно утилизировать ресурсы современных серверов.

Sphinx имеет прямую интеграцию с "Первой Формой" и может заменять обычный поиск по базе.

Последовательность шагов по установке Sphinx

1.Скачать дистрибутив с официального сайта.

2.Распаковать архив в корневую папку sphinx.

3.В папке sphinx создать папку data и в ней три вложенные папки: index, log и binlog.

4.Зарегистрировать службу командой

c:\sphinx\bin\searchd --config c:\sphinx\sphinx-min.conf.in --install --servicename Sphinx

Для удаления предыдущей службы использовать команду

c:\sphinx\bin\searchd --servicename Sphinx –delete

5.Настроить файл конфигурации c:\sphinx\spinx-min.conf.in.

6.Запустить создание индексов командой

c:\sphinx\bin\indexer --rotate --all --print-queries --config c:\sphinx\sphinx-min.conf.in

7.Запустить службу

net start sphinx

8.Для проверки работы службы можно использовать утилиту mysql.exe из дистрибутива mysql:

подключиться к серверу командой

c:\mysql\bin\mysql -h 127.0.0.1 -P 9306

и выполнить запрос

show status;

9.В файл web.config добавить строку подключения SphinxConnectionString

<add name="SphinxConnectionString" connectionString="Server=*****;Port=9306;Character Set=utf8" providerName="System.Data.MySqlClient" />

10. С помощью installutil.exe установить службу TCSphinxIndexerService.exe.

11. Настроить для службы индексации файл конфигурации TCSphinxIndexerService.exe.config.

Поддерживаются два типа таймеров: ежедневные с scheduledTime и периодические с intervalMinutes.

Настройка Sphinx

Настройки самого Sphinx хранятся в файле конфигурации sphinx-min.conf.inf, который разбит на две части: источники данных (source) и индексы (index).

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

Источники данных

Для "Первой Формы" в качестве источников данных выступают запросы T-SQL, которые загружают данные и описания полей. Для каждого индекса создается отдельный запрос.

Чтобы полнотекстовые данные были доступны для поиска, при конфигурировании источников надо указать значения

для параметров:

sql_field_{тип}

Примеры:

sql_field_string = Description
sql_field_string = ExtparamValue

для метаданных:

sql_attr_{тип}

Примеры:

sql_attr_timestamp = UploadDate
sql_attr_bool = IsClosed

Индексы

При интеграции с "Первой Формой" используются восемь параметров поиска:

Параметр

Описание

morphology

 

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

стеммер - наиболее простой и быстрый алгоритм, позволяющий найти основу слова без использования дополнительных словарей, основываясь только на правилах конкретного языка. Основным минусом стеммера является невысокая точность определения основы слова; 

лемматайзер - использует морфологические словари, поэтому позволяет не просто находить основу слова, а приводить его к нормальной (словарной) форме. Поиск с использованием лемматайзера более точен, но работает медленнее чем стеммер. Для использования лемматайзера необходимо скачать морфологические словари с сайта sphinxsearch.com и в файле конфигурации в блоке indexer указать путь к папке со словарями при помощи опции lemmatizer_base;

два фонетических алгоритмаSoundex и Metaphone, которые работают только для английского языка. Эти алгоритмы заменяют слова на их фонетический код таким образом, что разные по написанию, но схожие по звучанию слова будут считаться одинаковыми. Наиболее полезными фонетические алгоритмы могут оказаться, например, для поиска по фамилиям.

!warning В "Первой Форме" рекомендуется использовать стеммер

min_stemming_len

Минимальная длина слова для стемминга. Значения меньше 2 будут сильно увеличивать общий объем индекса

min_word_len

Минимальная длина слова для попадания в индекс

expand_keywords

 

Поисковая фраза будет автоматически заменяться на маску:

running -> (running| *running*| #running)

min_prefix_len

Минимальная длина префикса при поиске по маске

html_strip

Признак, вырезать ли теги html из индексируемого текста. Может быть важен для обработки текста задач и ДП "Таблица"

charset_table

Таблица кодировки. Нужна для символов больше одного байта

blend_chars

Смешанные символы, которые будут считаться одновременно и индексируемыми символами, и разделителями. Например, слово "кто-то" без указания символа "-" не будет найдено. Сюда же могут быть отнесены разделительные символы, используемые в датах, знаки валют, @ и пр.

Полное описание параметров индексирования на сайте Sphinx.

Настройки можно наследовать, поэтому указав параметры источника или индекса один раз, далее в тексте через двоеточие можно указывать название источника или индекса, к которому применятся те же настройки.

source firstformdb
{

}
source files : firstformdb
{

}

Особенности индексирования Sphinx в "Первой Форме"

Индексы Sphinx могут быть простыми или составными (т.е. объединять данные двух индексов). Составные индексы формируются следующим образом:

индексация всей базы происходит раз в сутки. При этом задачи, созданные в течение следующего дня, не попадают в поисковые запросы;

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

"Первая Форма" не всегда может уведомлять о появлении новых данных индексы реального времени Sphinx. Таблицы со значениями доп. параметров могут обновляться одновременно из разных источников, и "Первая Форма" не может гарантировать, что Sphinx будет об этом уведомлен. Именно поэтому в "Первой Форме" используются не индексы реального времени, а составной индекс.

Период индексирования можно настраивать в зависимости от специфики работы конкретной компании. В таком случае объединять два индекса не потребуется, а задержка обновления будет равна периоду индексирования. Для этого используется сервис Sphinx indexer. Для помощи в настройке сервиса можно обратиться в техподдержку "Первой Формы".

Ранжирование результатов поиска

Результаты поиска ранжируются по релевантности, которая определяется по формуле:

expr('sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight+refcount*10)*1000+bm25')

Параметр refcount содержит количество задач, которые ссылаются на данную задачу, например, через ДП Lookup. Чем больше задач ссылается на данную, тем выше будет ее позиция в результатах поиска.

Обслуживание

Индексирование Sphinx обычно выполняется в ночное время службой Sphinx indexer. Для снижения нагрузки на сервер БД ночные запросы для индексации Sphinx следует включать, только если в файле web.config в строке connectionStrings указано name="SphinxConnectionString".

Если Sphinx не используется, остановите службу Sphinx indexer.

Полезные ссылки