Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: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.
Версия полнотекстового индекса по умолчанию в SQL Server 2025 (17.x) и более поздних версиях — 2. Файлы DLL по умолчанию для версии 2 находятся в каталоге
C:\Program Files\Microsoft SQL Server\MSSQL17.<instance-name>\MSSQL\Binn\ftcomponents\[filters|wordbreakers].Чтобы переопределить значение по умолчанию или добавить новый компонент, создайте
version_overrides.jsonфайл в каталогеC:\Program Files\Microsoft SQL Server\MSSQL17.<instance-name>\MSSQL\FTData.Чтобы добавить или заменить средство разбиения слов, обновите
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) с минимальными привилегиями.
Используйте
sp_fulltext_serviceдля обновления внутреннего списка языков и типов документов для точной отчетности DMV:EXECUTE sp_fulltext_service 'update_languages';Перезапустите процессы узла управляющей программы фильтра (
fdhost.exe), чтобы переопределения вступили в силу для будущих запросов и групп населения:EXECUTE sp_fulltext_service 'restart_all_fdhosts';
Пример. Поддержка пользовательского расширения документа
Сценарий: вы хотите добавить поддержку индексирования файлов с собственным пользовательским расширением, например .myextension.
Найдите существующий установленный обработчик фильтра для связанного класса документов с помощью
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';Создайте или обновите
version_overrides.jsonв каталогеFTData, используя приведённые вышеclass_idиpath. В данном случае:{ "doctypes": { ".myextension": [ { "version": 2, "handler": "%SystemRoot%\\system32\\query.dll", "clsid": "C1243CA0-BF96-11CD-B579-08002B30BFEB" } ] } }Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:
EXECUTE sp_fulltext_service 'update_languages'; EXECUTE sp_fulltext_service 'restart_all_fdhosts';
Пример. Установка стороннего фильтра (Foxit PDF IFilter)
Следуйте документации по установке сторонних производителей. Информацию о Foxit PDF IFilter см. в статье Как скачать надстройку IFilter для Foxit PDF Editor.
Установщики обычно записывают регистрационные данные в
HKCRи размещают двоичные файлы вProgram Files.Создайте или обновите
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" } ] } }Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:
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 выполняется в следующем порядке:
- Регистрация для конкретного экземпляра в разделе
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Filtersдля соответствующих расширений и в разделеHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Languagesдля соответствующих LCID. - Регистрация системы в
HKEY_CLASSES_ROOT(HKCR), если загрузка ресурсов операционной системы включена черезsp_fulltext_service 'load_os_resources'.
Регистрация для конкретного экземпляра имеет приоритет. Измените его, если требуется, чтобы экземпляр SQL Server использовал компонент, который отличается от регистрации операционной системы или других установленных экземпляров.
Установка и загрузка компонентов версии 1
Перед установкой DLL-файла, содержащего новые средства разбиения слов или фильтры, убедитесь, что он имеет другое имя файла от любого из существующих DLL-файлов, установленных на экземпляре сервера.
Скопируйте новый DLL-файл в каталог, содержащий стандартные DLL-файлы SQL Server для экземпляра сервера. Расположение по умолчанию:
C:\Program Files\Microsoft SQL Server\MSSQL.<instance_name>\MSSQL\BinnУстановите новое средство разбиения слов или фильтры в соответствии с их документацией.
Используйте
sp_fulltext_serviceдля загрузки только что установленных разделителей слов и фильтров в экземпляр сервера следующим образом:EXECUTE sp_fulltext_service @action = 'load_os_resources', @value = 1;Используйте
sp_fulltext_serviceдля обновления списка языков, как показано ниже.EXECUTE sp_fulltext_service 'update_languages';Перезапустите процессы узла фильтра-демона (
fdhost.exe) следующим образом, используяsp_fulltext_service:EXECUTE sp_fulltext_service 'restart_all_fdhosts';
Пример. Поддержка пользовательского расширения документа
Сценарий. Вы хотите добавить поддержку индексирования файлов с собственным пользовательским расширением, например .myextensionс помощью существующего установленного фильтра.
Найдите CLSID для фильтра, который требуется повторно использовать. Например, чтобы повторно использовать фильтр простого текста, изучите регистрацию
.txtс использованием отчётности компонентов версии 1:ALTER DATABASE SCOPED CONFIGURATION SET FULLTEXT_INDEX_VERSION = 1; GO SELECT * FROM sys.fulltext_document_types WHERE document_type = '.txt';Добавьте записи реестра для конкретного экземпляра для нового расширения. Запись расширения сопоставляет
.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.Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:
EXECUTE sp_fulltext_service 'update_languages'; EXECUTE sp_fulltext_service 'restart_all_fdhosts';
Пример. Установка стороннего фильтра (Foxit PDF IFilter)
Сценарий: требуется, чтобы полнотекстовые индексы версии 1 использовали сторонний PDF IFilter, который регистрируется в системе Windows.
Следуйте документации по установке сторонних производителей. Сведения о Foxit PDF IFilter см. в статье Как загрузить дополнение IFilter для Foxit PDF Editor.
Включите загрузку ресурсов операционной системы, чтобы при поиске компонента версии 1 использовался резервный вариант
HKCR, если у экземпляра SQL Server отсутствует регистрация для конкретного экземпляра.pdf:EXECUTE sp_fulltext_service @action = 'load_os_resources', @value = 1;Обновите список зарегистрированных компонентов и перезапустите процессы узла управляющей программы фильтра:
EXECUTE sp_fulltext_service 'update_languages'; EXECUTE sp_fulltext_service 'restart_all_fdhosts';
Если вы не хотите использовать HKCR как запасной вариант, вместо этого добавьте записи MSSearch\Filters и MSSearch\CLSID для .pdf для конкретного экземпляра. Записи для конкретного экземпляра имеют приоритет над системной регистрацией.
Связанный контент
- Установить учетную запись службы для запуска демона полнотекстовой фильтрации
- Настройка фильтров и управление ими
- Настройка и управление средствами разбиения текста на слова и стеммерами
- Двоичные файлы полнотекстовой фильтрации
- Двоичные файлы средств полнотекстового разбиения слов и стеммера
- Обновление полнотекстового индекса
- sp_fulltext_service (Transact-SQL)
- sys.fulltext_indexes (Transact-SQL)
- ALTER DATABASE SCOPED CONFIGURATION - FULLTEXT_INDEX_VERSION