Настройка и управление файлами тезауруса для полнотекстового поиска
В SQL Server полнотекстовые запросы могут выполнять поиск синонимов для заданных пользователем терминов с помощью тезауруса. Тезаурус в SQL Server определяет набор синонимов для указанного языка. Системные администраторы могут определять две формы синонимов: расширяющие наборы и заменяющие наборы. Подготовив тезаурус, ориентированный на пользовательские полнотекстовые данные, можно эффективно расширить область полнотекстовых запросов к этим данным. Сопоставление с тезаурусом выполняется для всех запросов FREETEXT и FREETEXTABLE и для любых запросов CONTAINS и CONTAINSTABLE, которые указывают предложение FORMSOF THESAURUS.
В этом разделе
Основные задачи для создания файла тезауруса
Исходное содержимое файлов тезауруса
Размещение файлов тезауруса
Использование файлов тезауруса запросами
Основные сведения о структуре файла тезауруса
Работа с файлами тезауруса
Изменение файла тезауруса
Основные задачи для создания файла тезауруса
Прежде чем запросы полнотекстового поиска экземпляра сервера смогут найти синонимы на данном языке, необходимо определить сопоставления тезауруса (синонимы) для этого языка. В каждом тезаурусе необходимо вручную определить следующее.
Настройка диакритических знаков
Для заданного тезауруса все шаблоны поиска могут учитывать или не учитывать диакритические знаки, такие как тильда (~), акут (ґ) или умляут (Ё). Такие шаблоны соответственно называются шаблонами с учетом диакритических знаков или шаблонами без учета диакритических знаков). Например, предположим, что в запросе полнотекстового поиска необходимо заменить шаблон «café» другими шаблонами. Если тезаурус не учитывает диакритические знаки, то полнотекстовый поиск замещает шаблоны «café» и «cafe». Если файл тезауруса учитывает диакритические знаки, то полнотекстовый поиск замещает только шаблон «café». По умолчанию тезаурус не учитывает диакритические знаки.
Расширяющий набор
Расширяющий набор содержит группу синонимов, таких как «писатель», «автор» и «журналист», которые заменяют друг друга в полнотекстовом поиске. Запросы, содержащие слова, которые совпадают с одним из синонимов в расширяющем наборе, расширяются таким образом, чтобы включать в себя все другие синонимы в этом расширяющем наборе.
Дополнительные сведения см. в подразделе «XML-структура расширяющего набора» далее в этом разделе.
Заменяющий набор
Заменяющий набор содержит текстовый шаблон, заменяемый подстановочным набором. Пример см. в подразделе «XML-структура заменяющего набора» далее в этом разделе.
[В начало]
Исходное содержимое файлов тезауруса
SQL Server предоставляет набор XML-файлов тезауруса, по одному для каждого поддерживаемого языка. Эти файлы в основном пустые. Они содержат только XML-структуру верхнего уровня, общую для всех тезаурусов SQL Server, и заключенный в комментарии образец тезауруса.
Все файлы тезауруса, поставляемые с SQL Server, содержат следующий XML-код:
<XML ID="Microsoft Search Thesaurus">
<!-- Commented out
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<expansion>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</expansion>
<replacement>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</replacement>
<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>
</thesaurus>
-->
</XML>
[В начало]
Размещение файлов тезауруса
Местоположение файлов тезауруса по умолчанию:
<Путь_к_файлам_данных_SQL_Server>\MSSQL11.MSSQLSERVER\MSSQL\FTDATA\
В местоположении по умолчанию содержатся следующие файлы.
Зависящие от языка файлы тезауруса
При установке в указанном выше месте устанавливаются пустые файлы тезауруса. Для каждого поддерживаемого языка предоставляется отдельный файл. Системный администратор может настроить эти файлы.
Имена файлов по умолчанию для файлов тезауруса имеют следующий формат:
‘ts’ + <трехбуквенное_сокращенное_наименование_языка> + '.xml'
Имя файла тезауруса для данного языка указывается в следующем параметре реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<имя-экземпляра>\MSSearch\<аббревиатура-языка>.
Файл глобального тезауруса
Пустой файл глобального тезауруса, tsGlobal.xml.
Можно менять местонахождение и имена файлов тезауруса, изменяя соответствующий раздел реестра. Для каждого языка местонахождение файла тезауруса указывается в следующем параметре реестра:
HKLM/SOFTWARE/Microsoft/Microsoft SQL Server/<имя-экземпляра>/MSSearch/Language/<аббревиатура-языка>/TsaurusFile
Файл глобального тезауруса соответствует языку «Нейтральный» с кодом языка (LCID) 0. Это значение может быть изменено только администратором.
[В начало]
Использование файлов тезауруса запросами
В каждом запросе тезауруса используется как языковой тезаурус, так и глобальный. Вначале запрос ищет файл, относящийся к конкретному языку, и загружает его для обработки (если он не загружен). Запрос расширяется с целью включить в файл тезауруса синонимы конкретного языка, заданные правилами расширяющего и заменяющего наборов. Затем эти шаги повторяются для глобального тезауруса. Но если термин уже входит в состав соответствий в файле конкретного языка, он используется в глобальном тезаурусе.
[В начало]
Основные сведения о структуре файла тезауруса
Каждый файл тезауруса определяет XML-контейнер, идентификатор которого — Microsoft Search Thesaurus, и комментарий, <!-- … -->, который содержит образец тезауруса. Тезаурус определен в элементе <thesaurus>, который содержит образцы дочерних элементов, которые определяют настройку диакритических знаков, расширяющие наборы и заменяющие наборы следующим образом.
XML-структура настройки диакритических знаков
Настройка диакритических знаков определяется в отдельном элементе <diacritics_sensitive>. Этот элемент содержит целое значение, которое управляет поведением диакритических знаков, как показано ниже.
Настройка диакритических знаков
Значение
XML
Не учитывать диакритические знаки
0
<diacritics_sensitive>0</diacritics_sensitive>
С учетом диакритических знаков
1
<diacritics_sensitive>1</diacritics_sensitive>
Примечание Эту настройку можно применить для файла только единожды, и она применяется для всех шаблонов поиска в файле. Этот параметр невозможно указать для отдельных шаблонов.
XML-структура расширяющего набора
Каждый расширяющий набор заключен в элемент <expansion>. Внутри этого элемента можно указать одну или несколько подстановок в элементе <sub>. В расширяющем наборе можно указать группу подстановок, являющихся синонимами.
Например, можно изменить раздел расширения так, чтобы подстановки «писатель», «автор» и «журналист» считались синонимами. Полнотекстовые запросы, содержащие слова, совпадающие с одним из подстановочных слов, расширяются таким образом, чтобы включать в себя другие подстановочные слова в этом расширяющем наборе. Следовательно, в предыдущем примере при выполнении запроса FORMS OF THESAURUS или FREETEXT со словом «автор» после полнотекстового поиска будут также возвращены результаты, содержащие слова «писатель» и «журналист».
Для этого примера раздел расширяющего набора должен выглядеть следующим образом:
<expansion> <sub>writer</sub> <sub>author</sub> <sub>journalist</sub> </expansion>
XML-структура заменяющего набора
Каждый заменяющий набор заключен в элемент <replacement>. Внутри этого элемента можно указать один или несколько шаблонов в элементе <pat> и ноль или более подстановок в элементах <sub>, по одному для синонима. Можно указать шаблон, заменяемый подстановочным набором. Шаблоны и подстановки могут содержать одно слово или последовательность слов. Если для шаблона не указано подстановки, то шаблон удаляется из запроса пользователя.
Например, пусть необходимо заменить слово-шаблон «W2K» словами-подстановками «Windows 2000» или «XP». При выполнении полнотекстового запроса со словом «W2K» полнотекстовый поиск возвращает только результаты, содержащие слова «Windows 2000» или «XP». Результаты, содержащие слово «W2K», не возвращаются. Это происходит потому, что шаблон «W2K» заменен шаблонами «Windows 2000» и «XP».
Для этого примера раздел заменяющего набора должен выглядеть следующим образом:
<replacement> <pat>W2K</pat> <sub>Windows 2000</sub> <sub>XP</sub> </replacement>
Если имеются два заменяющих набора с одинаковыми сравниваемыми шаблонами, приоритет имеет самый длинный из них. Например, если определены следующие заменяющие наборы, при выполнении запроса FORMS OF THESAURUS по фразе «сообщество Internet Explorer в сети», набор «Internet Explorer» имеет приоритет перед набором «Internet». Следовательно, запрос будет обрабатываться так, как будто он сформирован по фразам «сообщество IE в сети» или «сообщество IE 5 в сети».
<replacement> <pat>Internet</pat> <sub>intranet</sub> </replacement>
и
<replacement> <pat>Internet Explorer</pat> <sub>IE</sub> <sub>IE 5</sub> </replacement>
[В начало]
Работа с файлами тезауруса
Изменение файла тезауруса
- Изменение файла тезауруса
Загрузка обновленного файла тезауруса
Просмотр разметки, полученной в результате применения средства разбиения по словам, тезауруса и списка стоп-слов
[В начало]
Изменение файла тезауруса
Тезаурус для данного языка может быть настроен путем изменения соответствующего файла тезауруса (XML-файла). В процессе установки устанавливаются пустые файлы тезауруса, которые содержат только контейнер <xml> и заключенный в комментарии образец элемента <thesaurus>. Для правильной работы запросов полнотекстового поиска синонимов необходимо создать реальный элемент <thesaurus>, который определяет набор синонимов. Могут быть определены две формы синонимов — расширяющие наборы и заменяющие наборы.
Ограничения для файлов тезауруса
На изменения файла тезауруса налагаются следующие ограничения.
Только системные администраторы имеют право обновлять, изменять и удалять файлы тезауруса.
При изменении файлов тезауруса с помощью текстовых редакторов эти файлы необходимо сохранять в Юникоде с указанием отметок порядка байтов.
Элементы тезауруса не могут быть пустыми или делиться на пустые строки.
Фразы в файле тезауруса не могут иметь длину более 512 символов.
Тезаурус не должен содержать повторяющихся элементов среди элементов <sub> расширяющих наборов и элементов <pat> заменяющих наборов.
Рекомендации для файлов тезауруса
Рекомендуется, чтобы элементы в файле тезауруса не содержали специальных символов. Это объясняется особенностями поведения средств разбиения по словам в отношении специальных символов. Если элемент тезауруса содержит какие-нибудь специальные символы, то средства разбиения по словам, использованные в сочетании с этим элементом, могут оказать малозаметное воздействие на поведение полнотекстового запроса.
Рекомендуется, чтобы элементы <sub> не содержали стоп-слов, так как стоп-слова удаляются из полнотекстового индекса. Запросы расширяются, чтобы охватить элементы <sub> из файла тезауруса, и если элемент <sub> содержит стоп-слова, то размер запроса излишне увеличивается.
Изменение файла тезауруса
Откройте файл тезауруса в Блокноте.
При первом редактировании файла тезауруса удалите следующие строки комментариев, находящиеся, соответственно, в конце и в начале файла:
<!--Commented out -->
Добавьте, измените или удалите заменяющий или расширяющий набор.
Сохраните файл и закройте Блокнот.
Используйте хранимую процедуру sp_fulltext_load_thesaurus_file, чтобы загрузить содержимое файла тезауруса в базу данных tempdb, указав идентификатор языкового стандарта (код языка), соответствующий языку файла тезауруса. Например, файлу тезауруса английского языка, tsenu.xml, соответствует код языка 1033.
USE AdventureWorks ; EXEC sys.sp_fulltext_load_thesaurus_file 1033; GO
[В начало]