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Сервер
2DB
3DB

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 с expansion_type=0

runs с expansion_type=2

running с expansion_type=2

ran с expansion_type=2

jog с 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'.

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

Использование 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);