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


sys.dm_fts_parser (Transact-SQL)

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

sys.dm_fts_parser является функцией динамического управления.

Синтаксис

sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)

Аргументы

  • query_string
    Запрос, который необходимо подвергнуть синтаксическому анализу. Аргумент query_string может быть строковой цепочкой, соответствующей правилам синтаксиса CONTAINS. Например, можно включить словоформы, тезаурус и логические операторы.

  • lcid
    Идентификатор локали средства разбиения по словам, используемого для анализа query_string.

  • stoplist_id
    Идентификатор списка стоп-слов (если существует), используемый средством разбиения по словам, которое определено аргументом lcid. Аргумент stoplist_id имеет тип int. Если указано значение NULL, список стоп-слов не используется. Если указано значение 0, используется системный список стоп-слов.

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

  • accent_sensitivity
    Логическое значение, управляющее полнотекстовым поиском с учетом или без учета диакритических знаков. Аргумент accent_sensitivity имеет тип bit и может иметь одно из следующих значений:

    Значение

    Учитывать диакритические знаки

    0

    Не учитывать

    Слова, совпадающие во всем, кроме диакритических знаков, рассматриваются как идентичные.

    1

    С учетом регистра

    Слова, сходные по начертанию, но различающиеся диакритическими знаками, рассматриваются как разные.

    ПримечаниеПримечание

    Чтобы просмотреть текущую настройку этого значения для полнотекстового каталога, выполните следующую инструкцию Transact-SQL: SELECT fulltextcatalogproperty('catalog_name', 'AccentSensitivity');.

Возвращаемая таблица

Имя столбца

Тип данных

Описание

keyword

varbinary(128)

Шестнадцатеричное представление данного ключевого слова, возвращенное средством разбиения по словам. Это представление используется для хранения ключевых слов в полнотекстовом индексе. Это значение не предназначено для человека, но позволяет связать конкретное ключевое слово с выходными данными, возвращаемыми другими динамическими административными представлениями, которые возвращают содержимое полнотекстового индекса, такими как sys.dm_fts_index_keywords и sys.dm_fts_index_keywords_by_document.

ПримечаниеПримечание

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

group_id

int

Содержит целочисленное значение, помогающее различить логическую группу, из которой был сформирован данный термин. Например, выражение Server AND DB OR FORMSOF(THESAURUS, DB)" формирует следующие значения group_id для английского языка.

group_id

display_term

1

Server

2

DB

3

DB

phrase_id

int

Содержит целочисленное значение, помогающее различать варианты альтернативных форм составных слов, формируемые средством разбиения по словам, таким средствам, как полнотекстовой поиск. Иногда составные слова (например, «multi-million») определяются средством разбиения по словам в нескольких альтернативных формах. Эти альтернативные формы (фразы) необходимо как-то различать.

Например, выражение multi-million формирует следующие значения phrase_id для английского языка.

phrase_id

display_term

1

multi

1

million

2

multimillion

occurrence

int

Указывает расположение каждого термина в результате анализа. Например, для фразы «SQL Server query processor» occurrence вхождение будет содержать следующие значения occurrence терминов из фразы для английского языка.

occurrence

display_term

1

SQL

2

Server

3

query

4

processor

special_term

nvarchar(4000)

Содержит сведения о характеристиках термина, выданного средством разбиения по словам, в том числе:

Точное совпадение

пропускаемое слово;

конец предложения;

конец абзаца;

конец раздела.

display_term

nvarchar(4000)

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

expansion_type

int

Содержит сведения о природе расширения данного термина, в том числе:

0 — отдельное слово;

2 — расширение-словоформа;

4 — расширение/замена тезауруса.

Например, предположим, что тезаурус определяет слово run как расширение слова jog:

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

Термин FORMSOF (FREETEXT, run) формирует следующие выходные данные:

run c expansion_type=0

runs c expansion_type=2

running c expansion_type=2

ran c expansion_type=2

jog c expansion_type=4

source_term

nvarchar(4000)

Термин или фраза, из которой сформирован или создан в результате анализа данный термин. Например, запрос для word breakers" AND stemmers' выдает следующие значения source_term для английского языка.

source_term

display_term

средства разбиения по словам

слово

средства разбиения по словам

средства разбиения

парадигматические модули

парадигматические модули

Замечания

Функция динамического управления sys.dm_fts_parser поддерживает синтаксис и возможности полнотекстовых предикатов, например CONTAINS и FREETEXT, а также функции, например CONTAINSTABLE и FREETEXTTABLE.

Использование формата Юникода для синтаксического анализа специальных символов

При синтаксическом анализе строки запроса функция sys.dm_fts_parser использует параметры сортировки базы данных, с которой установлено соединение, если строка запроса не указана в Юникоде. Следовательно, для строки не в формате Юникод, которая содержит специальные символы, такие как u или c, выходные данные могут оказаться непредвиденными, поскольку зависят от параметров сортировки базы данных. Чтобы обработать строку запроса независимо от параметров сортировки базы данных, поместите перед строкой N, то есть N'query_string'.

Дополнительные сведения см. в подразделе «C. Отображение выходных данных строки, которая содержит специальные символы» далее в этом разделе.

Использование sys.dm_fts_parser

Функция sys.dm_fts_parser может быть очень полезной при отладке. Некоторые важные варианты использования.

  • Понять, как данное средство разбиения по словам рассматривает указанные входные данные.

    Если запросом были возвращены непредвиденные результаты, вероятной причиной может быть способ, используемый средством разбиения по словам для анализа и разбиения данных. С помощью sys.dm_fts_parser можно обнаружить результат, передаваемый средством разбиения по словам в полнотекстовый индекс. Кроме того, можно увидеть, какие из терминов являются стоп-словами, по которым не выполняется поиск в полнотекстовом индексе. Является ли термин стоп-словом для данного языка, зависит от его наличия в списке стоп-слов, указанном значением stoplist_id, которое объявлено в функции.

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

  • Понять, как парадигматический модуль работает с данными входными данными.

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

    FORMSOF( INFLECTIONAL, query_term )
    

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

  • Понять, как тезаурус расширяет или заменяет входные данные целиком или частично.

    Также можно указать:

    FORMSOF( THESAURUS, query_term )
    

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

    Обратите внимание, что если пользователь выполняет следующий код:

    FORMSOF( FREETEXT, query_term )
    

    Возможности словоформ и тезауруса применяются автоматически.

Кроме вышеперечисленных вариантов использования, функция sys.dm_fts_parser может значительно облегчить понимание и устранение множества других возможных проблем, связанных с полнотекстовым запросом.

Разрешения

Необходимо членство в предопределенной роли сервера sysadmin и права доступа к указанному списку стоп-слов.

Примеры

А.Отображение выходных данных указанного средства разбиения по словам для ключевого слова или фразы

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

The Microsoft business analysis

Диакритические знаки не учитываются.

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0)

Б.Отображение выходных данных указанного средства разбиения по словам в контексте фильтрации по списку стоп-слов

В следующем примере средство разбиения по словам для английского языка с кодом языка 1033, имеющее список английских стоп-слов с идентификатором 77, возвращает выходные данные для следующей строки запроса:

"The Microsoft business analysis" OR "MS revenue"

Диакритические знаки не учитываются.

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0)

В.Отображение выходных данных строки, которая содержит специальные символы

В следующем примере для синтаксического анализа строки на французском языке используется формат Юникод:

français

В этом примере указывается код языка для французского языка, 1036, и идентификатор стоп-слов, определенных пользователем, 5. Диакритические знаки учитываются.

SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);

См. также

Справочник

Динамические административные представления и функции полнотекстового и семантического поиска (Transact-SQL)

Основные понятия

Компонент Full-Text Search (SQL Server)

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

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

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

Запрос с полнотекстовым поиском

Запрос с полнотекстовым поиском

Защищаемые объекты