sys.dm_fts_parser (Transact-SQL)

Применимо к: SQL Server (все поддерживаемые версии)

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

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

Синтаксис

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

Аргументы

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

lcid
Идентификатор языкового стандарта (LCID) средства разбиения по словам, используемый для синтаксического анализа query_string.

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

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

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

Значение Чувствительность диакритических знаков ...
0 Не учитывать

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

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

Примечание

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

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

Имя столбца Тип данных Описание
ключевое слово 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 для английского языка.

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

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

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

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 для английского языка.

word breakers для display_termword
word breakers для display_termbreakers
stemmers для display_termstemmers

Примечания

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 и права доступа к указанному списку стоп-слов.

Примеры

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

В следующем примере средство разбиения по словам для английского языка с кодом языка 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)
Полнотекстовый поиск
Настройка и управление средством разбиения на слова и парадигматические модули для поиска
Настройка и управление файлами тезауруса для полнотекстового поиска
Настройка и управление стоп-словами и списками стоп-слов для полнотекстового поиска
Запросы с полнотекстовым поиском
Запросы с полнотекстовым поиском
Защищаемые объекты