Project

General

Profile

Настройка полнотекстового поиска (Full-text search, FTS)

Для обеспечения поиска в Ленте новостей необходимо, чтобы на SQL Server была включен полнотекстовый поиск Full-text search.
Кроме этого, необходимо, чтобы в базе данных МБД в таблице PH были созданы полнотекстовые индексы.
Компонента FTS в составе MS SQL 2005 устанавливается опционально, а начиная с MS SQL 2008 обычно присутствует постоянно.

  • Внимание, на MS SQL 2000 необходима установка внешних компонент для поддержки русского языка. Это в данной статье не рассматривается
  • Внимание, FTS не полностью работает на версии MS SQL 2005 Express. Невозможна автоматическая индексация изменений, это блокирует практическое использование FTS

Проверка наличия компоненты FTS

Необходимо убедиться, что компонента FTS установлена в составе сервера. Проще всего это сделать, выполнив запрос

select SERVERPROPERTY('IsFullTextInstalled')

Если ответ 1, то компонента присутствует, если 0, то ее необходимо установить.
Для MS SQL 2005 необходимо повторно запустить инсталлятор и установить компонент FTS. Для 2008 сервера доступен и другой вариант

Особенности настройки только для MS SQL 2005

Этот и вложенные пункты относятся только к MS SQL 2005. Для более поздних версий эти действия выполнять не нужно и вредно.

Поддержка русского языка, по-умолчанию, не доступна для полнотекстого поиска в MS SQL 2005, несмотря на наличие в комплекте сервера всех необходимых файлов. Включение поддержки русского языка несколько замысловато и требует ручного редактирования реестра.

Нужно узнать Instance ID.

Для этого идем в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
и видим все ID для всех именованных инсталляций серверов.
Название ключа - это имя Instance, а его значение - это ID
Например: EXPRESS=MSSQL.1

  • EXPRESS - имя
  • MSSQL.1 - ID

Нужно узнать FTDATA_PATH

идем HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Instance ID>\MSSQLServer
и смотрим значение ключа FullTextDefaultPath Это и есть FTDATA_PATH

Редактирование реестра

  1. Создаем ключ
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\\MSSearch\CLSID\{20036404-F1AF-11D2-A57F-006052076F32}
  2. Устанавливаем default value этого ключа
    ruslr.dll
  3. Создаем ключ
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\\MSSearch\CLSID\{20036414-F1AF-11D2-A57F-006052076F32}
  4. Устанавливаем default value этого ключа
    ruslr.dll
  5. Создаем ключ
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\\MSSearch\Language\rus
  6. Добавляем в него следующие значения:

p((. строку FTDATA_PATH необходимо заменить на реальный путь, найденный выше
| название ключа| значение тип строка (STRING) |
|NoiseFile|FTDATA_PATH\noiserus.txt|
|TsaurusFile|FTDATA_PATH\tsrus.xml|
|WBreakerClass|{20036404-F1AF-11D2-A57F-006052076F32}|
|StemmerClass|{20036414-F1AF-11D2-A57F-006052076F32}|

Название ключа Значение, число (тип DWORD)
Locale 419 шестнадцатеричное (1049 десятичное)

После завершения этих действие MSQ SQL Server необходимо перезагрузить.

Необходимые действия

В этом разделе описаны необходимые действия по конфигурированию сервера, все они выполняются посредством SQL запросов. Выполняющий сотрудник должен иметь достаточные знания, чтобы выполнять эти запросы на требуемой БД, используя Management studio
При выполнении запросов текущей должна быть база данных МБД.

Выключить верификацию сигнатур

Иначе сервер будет пытаться выходить в инет каждый раз после 5 минут простоя поиска для проверки подлинности компоненты, если интернета нет, то вся поисковая система подвисает на 45 секунд - это таймаут ожидания проверки. http://support.microsoft.com/kb/915850

sp_fulltext_service 'verify_signature', 0

Разрешить полнотектовый поиск

sp_fulltext_database 'enable'

Создать каталог полнотекстовых индексов

Необходимо в запросе указать путь к существующему каталогу, в котором сервер будет хранить файлы полнотекстовых индексов.

  • MDBFT - это название каталога в пределах сервера, сохраните MDBFT или укажите другое.
 CREATE FULLTEXT CATALOG MDBFT AS DEFAULT

Ранее рекомендовалось явно указывать путь хранения каталога на диске (IN PATH), но теперь в этом нет необходимости.

Создать индексы в таблице PH

Для этого необходимо знать имя уникального индекса в этой таблице. Его название зависит от инсталляции, его необходимо предварительно узнать, посмотрев содержимое БД.

Имя индекса PK_PH_3213E83F25869641 в запросе заменить на соответсвующее в используемой БД.

 CREATE FULLTEXT INDEX ON PH( [SubjText] LANGUAGE 'Russian',[Name] LANGUAGE 'Russian',[Comment] LANGUAGE 'Russian') KEY INDEX PK__PH__3213E83F25869641
   WITH  CHANGE_TRACKING AUTO 

Создание индекса для PostgresSQL

Для английского языка:

CREATE INDEX textsearch_idx ON ph USING GIN (to_tsvector('english', name || ' ' || comment || ' ' || SubjText));

Для русского языка:

CREATE INDEX textsearch_idx ON ph USING GIN (to_tsvector('russian', name || ' ' || comment || ' ' || SubjText));

Add picture from clipboard (Maximum size: 742 MB)