Поделиться через


Настройка и управление файлами тезауруса для полнотекстового поиска

Область применения:SQL Server

Запросы поиска SQL Server Full-Text могут с помощью Full-Text поискового тезауруса искать синонимы заданных пользователем терминов. Каждый тезаурус определяет набор синонимов для указанного языка. Подготовив тезаурус, ориентированный на пользовательские полнотекстовые данные, можно эффективно расширить область полнотекстовых запросов к этим данным.

Сопоставление тезауруса выполняется для всех запросов FREETEXT и FREETEXTTABLE, а также для любых запросов CONTAINS и CONTAINSTABLE, которые указывают FORMSOF THESAURUS условие.

Тезаурус полнотекстового поиска представлен в виде текстового XML-файла.

Что такое тезаурус

Прежде чем запросы полнотекстового поиска смогут найти синонимы на данном языке, необходимо определить сопоставления тезауруса (т. е. синонимы) для этого языка. Каждый тезаурус должен быть настроен вручную, чтобы определить следующие параметры:

  • Дополнительный набор

    Расширяющий набор содержит группу синонимов, таких как «писатель», «автор» и «журналист», которые заменяют друг друга в полнотекстовом поиске. Запросы, содержащие слова, которые совпадают с одним из синонимов в расширяющем наборе, расширяются таким образом, чтобы включать в себя все другие синонимы в этом расширяющем наборе.

    Для получения дополнительной информации см. раздел XML-структура набора расширения в этой статье.

  • Заменяющий набор

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

  • Настройка диакритических знаков

    Для заданного тезауруса все шаблоны поиска могут учитывать или не учитывать диакритические знаки, такие как тильда (~), акут () или умляут (¨). Такие шаблоны соответственно называются шаблонами с учетом диакритических знаков или шаблонами без учета диакритических знаков. Например, предположим, что в запросе полнотекстового поиска необходимо заменить шаблон «café» другими шаблонами. Если тезаурус не учитывает диакритические знаки, то полнотекстовый поиск замещает шаблоны «café» и «cafe». Если файл тезауруса учитывает диакритические знаки, то полнотекстовый поиск замещает только шаблон «café». По умолчанию тезаурус не учитывает диакритические знаки.

Файлы тезауруса по умолчанию

SQL Server предоставляет набор XML-файлов тезауруса, по одному для каждого поддерживаемого языка. Эти файлы в основном пустые. Они содержат только структуру XML верхнего уровня, которая распространена для всех тезаурусов SQL Server и закомментированного примера тезауруса.

Расположение файлов тезауруса

Местоположение файлов тезауруса по умолчанию:

<SQL_Server_data_files_path>\MSSQL13.MSSQLSERVER\MSSQL\FTDATA\

В местоположении по умолчанию содержатся следующие файлы.

  • Зависящие от языка файлы тезауруса.

    Программа установки устанавливает пустые тезаурус-файлы в предыдущем расположении. Для каждого поддерживаемого языка предоставляется отдельный файл. Системный администратор может настроить эти файлы.

    Имена файлов по умолчанию для файлов тезауруса имеют следующий формат:

    'ts' + <three-letter language-abbreviation> + '.xml'

    Для данного языка имя файла тезауруса указывается в следующем параметре реестра:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<instance-name>\MSSearch\<language-abbrev>

  • Файл глобального тезауруса.

    Пустой файл глобального тезауруса, tsGlobal.xml.

Изменение расположения файла тезауруса

Можно изменять местоположение и имена файла тезауруса, изменяя его ключ реестра. Для каждого языка местонахождение файла тезауруса указывается в следующем параметре реестра:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance name>\MSSearch\Language\<language-abbreviation>\TsaurusFile

Файл глобального тезауруса соответствует языку «Нейтральный» с кодом языка (LCID) 0. Это значение может быть изменено только администратором.

Как полнотекстовые запросы используют тезаурус

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

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

  2. Затем эти шаги повторяются для глобального тезауруса. Однако, если термин уже является частью совпадения в файле тезауруса для конкретного языка, он не доступен для соответствий в глобальном тезаурусе.

Структура файла тезауруса

Каждый файл тезауруса определяет XML-контейнер, идентификатор которого — Microsoft Search Thesaurusи комментарий... <!---->, содержащий пример тезауруса. Тезаурус определен в элементе <thesaurus>, содержащем образцы дочерних элементов, которые определяют настройку диакритических знаков, наборы расширения и наборы замены.

Типичный пустой файл тезауруса содержит следующий 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 2012</sub>
        </replacement>
        <expansion>
            <sub>run</sub>
            <sub>jog</sub>
        </expansion>
    </thesaurus>
-->
</XML>

XML-структура набора расширения

Каждый набор расширения заключен в элемент <expansion>. Внутри этого элемента можно указать одну или несколько подстановок в элементе <sub>. В расширяющем наборе можно указать группу подстановок, являющихся синонимами.

Например, можно изменить раздел расширения так, чтобы подстановки «писатель», «автор» и «журналист» считались синонимами. Запросы полнотекстового поиска, содержащие совпадения в одной подстановке, развернуты, чтобы включить все остальные подстановки, указанные в наборе расширений. Следовательно, в предыдущем примере при выполнении запроса FORMS OF THESAURUS или FREETEXT со словом «автор» после полнотекстового поиска будут также возвращены результаты, содержащие слова «писатель» и «журналист».

Вот как выглядит раздел набора расширений для предыдущего примера:

<expansion>
        <sub>writer</sub>
        <sub>author</sub>
        <sub>journalist</sub>
</expansion>

XML-структура замены набора

Каждый заменяющий набор заключен в элемент <replacement>. В этом элементе можно указать один или несколько шаблонов в элементе <pat> и ноль или несколько подстановок в <sub> элементах, по одному на синоним. Можно указать шаблон, заменяемый набором замен. Шаблоны и подстановки могут содержать одно слово или последовательность слов. Если для шаблона не указана подстановка, это приводит к удалению шаблона из пользовательского запроса.

Например, допустим, что необходимо заменить запросы «Win8» на «Windows Server 2012» или «Windows 8.0». При выполнении полнотекстового запроса со словом «Win8» полнотекстовый поиск возвращает только результаты, содержащие слова «Windows Server 2012» или «Windows 8.0». Он не возвращает результаты, содержащие "Win8". Это связано с тем, что шаблон Win8 "заменен" шаблонами "Windows Server 2012" и "Windows 8.0".

Вот как выглядит раздел набора замены для предыдущего примера:

<replacement>
        <pat>Win8</pat>
        <sub>Windows Server 2012</sub>
        <sub>Windows 8.0</sub>
</replacement>

Если имеются два заменяющих набора с одинаковыми сравниваемыми шаблонами, приоритет имеет самый длинный из них. Например, если вы выполняете запрос FORMS OF THESAURUS по фразе «сообщество Internet Explorer в Интернете» и у вас определены следующие заменяющие наборы, то набор «Internet Explorer» имеет приоритет перед набором «Internet». Поэтому запрос обрабатывается как "интернет-сообщество IE" или "интернет-сообщество IE 9".

<replacement>
         <pat>Internet</pat>
         <sub>intranet</sub>
</replacement>

и

<replacement>
         <pat>Internet Explorer</pat>
         <sub>IE</sub>
         <sub>IE 9</sub>
</replacement>

XML-структура настройки диакритических знаков

Настройка диакритических знаков определяется в отдельном элементе <diacritics_sensitive>. Этот элемент содержит целое значение, которое контролирует чувствительность к диакритическим знакам.

Настройка диакритических знаков Значение XML
Устойчивость к акцентам 0 <diacritics_sensitive>0</diacritics_sensitive>
Чувствительность к акцентам 1 <diacritics_sensitive>1</diacritics_sensitive>

Примечание.

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

Изменение тезауруса

Тезаурус для данного языка можно настроить путем изменения соответствующего файла тезауруса (XML-файла). Во время установки устанавливаются пустые файлы тезауруса, содержащие только контейнер <xml> и закомментированный образец элемента <thesaurus>. Чтобы полнотекстовые поисковые запросы, ищущие синонимы, работали правильно, необходимо создать реальный <thesaurus> элемент, определяющий набор синонимов. Могут быть определены две формы синонимов — расширяющие наборы и заменяющие наборы.

Изменение файла тезауруса

  1. Откройте этот файл в Блокноте или в другом текстовом редакторе.

  2. Если вы впервые редактируете файл тезауруса, удалите следующие строки комментариев в начале и конце файла соответственно:

    <!--Commented out
    -->
    
  3. Добавьте, измените или удалите заменяющий или расширяющий набор.

  4. Сохраните файл и закройте Блокнот.

  5. Используйте sp_fulltext_load_thesaurus_file , чтобы загрузить содержимое файла tempdbтезауруса в , указав локальный идентификатор (LCID), соответствующий языку файла тезауруса. Например, английскому файлу тезауруса, tsenu.xml, соответствует идентификатор языка 1033.

    USE AdventureWorks;
    
    EXECUTE sys.sp_fulltext_load_thesaurus_file 1033;
    GO
    

Рекомендации для изменения файлов тезауруса

Рекомендуется, чтобы элементы в файле тезауруса не содержали специальных символов. Это объясняется из-за тонкостей поведения средств разбиения по словам в отношении специальных символов. Если элемент тезауруса содержит какие-нибудь специальные символы, то средства разбиения по словам, использованные в сочетании с этим элементом, могут оказать малозаметное воздействие на поведение полнотекстового запроса.

Рекомендуется, чтобы элементы <sub> не содержали стоп-слов, так как стоп-слова удаляются из полнотекстового индекса. Запросы расширяются, чтобы охватить элементы <sub> из файла тезауруса, и если элемент <sub> содержит стоп-слова, то размер запроса излишне увеличивается.

Ограничения для изменения файлов тезауруса

На изменения файла тезауруса налагаются следующие ограничения.

  • Только системные администраторы имеют право обновлять, изменять и удалять файлы тезауруса.

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

  • Записи тезауруса не могут быть пустыми или превращать слова в пустую строку.

  • Фразы в файле тезауруса не могут иметь длину более 512 символов.

  • Тезаурус не должен содержать повторяющихся элементов среди элементов <sub> расширяющих наборов и элементов <pat> заменяющих наборов.