Настройка фильтров и разбиений по словам

Применимо к:SQL Server

В этой статье описано, как просматривать и настраивать фильтры, средства разбиения на слова и средства выделения основ слов для полнотекстового поиска в экземпляре SQL Server.

Примечание.

Настройка запрещена для База данных SQL Azure или Управляемый экземпляр SQL Azure, так как доступ к реестру Windows или файловой системе узла ограничен.

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

  • Полнотекстовый индекс версии 1 использует регистрацию компонентов на основе реестра Windows. Регистрация компонентов для конкретного экземпляра хранится в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch, который разделен на подразделы Filters, Language и CLSID. Если задать load_os_resources значение 1 с помощью sp_fulltext_service, полнотекстовый поиск переключается на поиск HKEY_CLASSES_ROOT расширений и LCID, отсутствующих в регистрации экземпляра. Дополнительные сведения см. в разделе "Настройка фильтров версии 1" и средства разбиения слов.

  • Полнотекстовый индекс версии 2 упрощает процесс настройки. Вместо чтения данных из реестра Windows можно указать необязательный файл version_overrides.json для каждого экземпляра. Дополнительные сведения см. в разделе Настройка фильтров версии 2 и средств разбиения слов.

Чтобы проверить версию, используемую полнотекстовым индексом, выполните запрос к столбцу index_version в sys.fulltext_indexes. Чтобы управлять версией, используемой при создании или перестроении индексов, используйте конфигурацию уровня базы данных FULLTEXT_INDEX_VERSION.

Просмотр зарегистрированных компонентов

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

Чтобы просмотреть все лингвистические компоненты, выполните sp_help_fulltext_system_components с аргументом all :

EXECUTE sp_help_fulltext_system_components 'all';

Примечание.

sp_help_fulltext_system_components возвращает сведения о зарегистрированных компонентах для указанной версии полнотекстового индекса через конфигурацию области действия базы данных FULLTEXT_INDEX_VERSION.

Настройка фильтров версии 2 и разбиений по словам

Относится к: SQL Server 2025 (17.x) и более поздним версиям.

Полнотекстовые индексы версии 2 не считывают реестр Windows. Выполните шаги, приведённые в этом разделе, чтобы настроить модули разбиения слов, стеммеры и фильтры версии 2.

  1. Версия полнотекстового индекса по умолчанию в SQL Server 2025 (17.x) и более поздних версиях — 2. Файлы DLL по умолчанию для версии 2 находятся в каталоге C:\Program Files\Microsoft SQL Server\MSSQL17.<instance-name>\MSSQL\Binn\ftcomponents\[filters|wordbreakers] .

  2. Чтобы переопределить значение по умолчанию или добавить новый компонент, создайте version_overrides.json файл в каталоге C:\Program Files\Microsoft SQL Server\MSSQL17.<instance-name>\MSSQL\FTData .

  3. Чтобы добавить или заменить средство разбиения слов, обновите languages раздел в JSON-файле. Для фильтров обновите doctypes раздел.

    Пример структуры JSON:

    {
       "languages": {
             "en": [{
                "version": 2,
                "handler": "MSWB7.dll",
                "wbClsid": "9faed859-0b30-4434-ae65-412e14a16fb8",
                "stemmerClsid": "e1e5ef84-c4a6-4e50-8188-99aef3de2659"
             }],
             "<BCP 47 locale name>": [{ ... }],
          }
    
       "doctypes": {
             ".html": [{
                "version": 2,
                "handler": "nlhtml.dll",
                "clsid": "e0ca5340-4534-11cf-b952-00aa0051fe20"
             }],
             ".<extension 2>": [{ ... }],
          }
    }
    

    Рассмотрим следующие правила для version_overrides.json файла:

    • Все поля в JSON-файле являются обязательными, за исключением stemmerClsid (необязательно).

    • Имя локали может быть любым именем локали BCP 47, в соответствии с стандартными именами локалей.

    • Если повторяющиеся записи существуют для одного языка и версии или расширения и версии, последняя запись имеет приоритет.

    • Библиотека DLL обработчика может быть относительным путем к файлу в отношении C:\Program Files\Microsoft SQL Server\MSSQL17.<instance-name>\MSSQL\Binn\ftcomponents\[filters|wordbreakers] каталога, где находятся двоичные файлы по умолчанию. Это также может быть абсолютный путь. Например, следующий JSON-файл обеспечивает поддержку индексирования PDF-файлов с помощью встроенного Windows фильтра PDF:

    {
       "doctypes": {
          ".pdf": [
             {
                "version": 2,
                "handler": "%SystemRoot%\\system32\\windows.data.pdf.dll",
                "clsid": "6C337B26-3E38-4F98-813B-FBA18BAB64F5"
             }
          ]
       }
    }
    

    Внимание

    Необходимо загрузить только подписанные и проверенные компоненты. Настройте правильные списки управления доступом (ACL) в файлах и папках DLL, содержащих их. Кроме того, следует запустить службу запуска FDHOST (MSSQLFDLauncher) с минимальными привилегиями.

  4. Используйте sp_fulltext_service для обновления внутреннего списка языков и типов документов для точной отчетности DMV:

    EXECUTE sp_fulltext_service 'update_languages';
    
  5. Перезапустите процессы узла управляющей программы фильтра (fdhost.exe), чтобы переопределения вступили в силу для будущих запросов и групп населения:

    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Пример. Поддержка пользовательского расширения документа

Сценарий: вы хотите добавить поддержку индексирования файлов с собственным пользовательским расширением, например .myextension.

  1. Найдите существующий установленный обработчик фильтра для связанного класса документов с помощью sys.fulltext_document_types или sp_help_fulltext_system_components 'filter'. Например, для обычного текста:

    ALTER DATABASE SCOPED CONFIGURATION
       SET FULLTEXT_INDEX_VERSION = 1;
    GO
    
    SELECT *
    FROM sys.fulltext_document_types
    WHERE document_type = '.txt';
    
  2. Создайте или обновите version_overrides.json в каталоге FTData, используя приведённые выше class_id и path. В данном случае:

    {
       "doctypes": {
          ".myextension": [
             {
                "version": 2,
                "handler": "%SystemRoot%\\system32\\query.dll",
                "clsid": "C1243CA0-BF96-11CD-B579-08002B30BFEB"
             }
          ]
       }
    }
    
  3. Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:

    EXECUTE sp_fulltext_service 'update_languages';
    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Пример. Установка стороннего фильтра (Foxit PDF IFilter)

  1. Следуйте документации по установке сторонних производителей. Информацию о Foxit PDF IFilter см. в статье Как скачать надстройку IFilter для Foxit PDF Editor.

    Установщики обычно записывают регистрационные данные в HKCR и размещают двоичные файлы в Program Files.

  2. Создайте или обновите version_overrides.json в каталоге FTData:

    {
       "doctypes": {
          ".pdf": [
             {
                "version": 2,
                "handler": "C:\\Program Files\\Foxit Software\\Foxit PDF IFilter\\PDFFilt.dll",
                "clsid": "987f8d1a-26e6-4554-b007-6b20e2680632"
             }
          ]
       }
    }
    
  3. Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:

    EXECUTE sp_fulltext_service 'update_languages';
    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Найдите CLSID

Самый простой способ найти CLSID, если он не задокументирован публично, — запросить DMV (динамические административные представления) или sp_help_fulltext_system_components с помощью FULLTEXT_INDEX_VERSION = 1, либо получить его из более старого экземпляра SQL Server.

Вы также можете проверить затронутые ключи реестра. Например, установка PDF-фильтра обновляет HKCR\.pdf\PersistentHandler. Затем вы можете взять этот PH CLSID и найти компонент CLSID как HKEY_CLASSES_ROOT\CLSID\{PH CLSID}\PersistentAddinsRegistered\{Component CLSID}.

Настройка фильтров версии 1 и разбиений по словам

Применимо: SQL Server 2025 (17.x) и предыдущих версий.

Полнотекстовые индексы версии 1 используют реестр Windows для определения фильтров, средств разбиения слов и средств выделения основ слов. Это относится к индексам SQL Server 2025 (17.x), которые по-прежнему используютсяindex_version = 1, а также к полнотекстовых индексам в более ранних SQL Server версиях.

Поиск компонента в версии 1 выполняется в следующем порядке:

  1. Регистрация для конкретного экземпляра в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Filters для соответствующих расширений и в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Languages для соответствующих LCID.
  2. Регистрация системы в HKEY_CLASSES_ROOT (HKCR), если загрузка ресурсов операционной системы включена через sp_fulltext_service 'load_os_resources'.

Регистрация для конкретного экземпляра имеет приоритет. Измените его, если требуется, чтобы экземпляр SQL Server использовал компонент, который отличается от регистрации операционной системы или других установленных экземпляров.

Установка и загрузка компонентов версии 1

  1. Перед установкой DLL-файла, содержащего новые средства разбиения слов или фильтры, убедитесь, что он имеет другое имя файла от любого из существующих DLL-файлов, установленных на экземпляре сервера.

  2. Скопируйте новый DLL-файл в каталог, содержащий стандартные DLL-файлы SQL Server для экземпляра сервера. Расположение по умолчанию:

    C:\Program Files\Microsoft SQL Server\MSSQL.<instance_name>\MSSQL\Binn
    
  3. Установите новое средство разбиения слов или фильтры в соответствии с их документацией.

  4. Используйте sp_fulltext_service для загрузки только что установленных разделителей слов и фильтров в экземпляр сервера следующим образом:

    EXECUTE sp_fulltext_service
        @action = 'load_os_resources',
        @value = 1;
    
  5. Используйте sp_fulltext_service для обновления списка языков, как показано ниже.

    EXECUTE sp_fulltext_service 'update_languages';
    
  6. Перезапустите процессы узла фильтра-демона (fdhost.exe) следующим образом, используя sp_fulltext_service:

    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Пример. Поддержка пользовательского расширения документа

Сценарий. Вы хотите добавить поддержку индексирования файлов с собственным пользовательским расширением, например .myextensionс помощью существующего установленного фильтра.

  1. Найдите CLSID для фильтра, который требуется повторно использовать. Например, чтобы повторно использовать фильтр простого текста, изучите регистрацию .txt с использованием отчётности компонентов версии 1:

    ALTER DATABASE SCOPED CONFIGURATION
       SET FULLTEXT_INDEX_VERSION = 1;
    GO
    
    SELECT *
    FROM sys.fulltext_document_types
    WHERE document_type = '.txt';
    
  2. Добавьте записи реестра для конкретного экземпляра для нового расширения. Запись расширения сопоставляет .myextension с CLSID фильтра, а запись CLSID сопоставляет этот CLSID с DLL-файлом фильтра.

    В следующем примере используется устаревший фильтр обычного текста CLSID и msfte.dll:

    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Filters\.myextension" /ve /t REG_SZ /d "{C7310720-AC80-11D1-8DF3-00C04FB6EF4F}" /f
    

    Замените <InstanceRoot> корнем экземпляра SQL Server, напримерMSSQL16.MSSQLSERVER.

  3. Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:

    EXECUTE sp_fulltext_service 'update_languages';
    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Пример. Установка стороннего фильтра (Foxit PDF IFilter)

Сценарий: требуется, чтобы полнотекстовые индексы версии 1 использовали сторонний PDF IFilter, который регистрируется в системе Windows.

  1. Следуйте документации по установке сторонних производителей. Сведения о Foxit PDF IFilter см. в статье Как загрузить дополнение IFilter для Foxit PDF Editor.

  2. Включите загрузку ресурсов операционной системы, чтобы при поиске компонента версии 1 использовался резервный вариант HKCR, если у экземпляра SQL Server отсутствует регистрация для конкретного экземпляра .pdf:

    EXECUTE sp_fulltext_service
       @action = 'load_os_resources',
       @value = 1;
    
  3. Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:

    EXECUTE sp_fulltext_service 'update_languages';
    EXECUTE sp_fulltext_service 'restart_all_fdhosts';
    

Если вы не хотите использовать HKCR как запасной вариант, вместо этого добавьте записи MSSearch\Filters и MSSearch\CLSID для .pdf для конкретного экземпляра. Записи для конкретного экземпляра имеют приоритет над системной регистрацией.