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');

Таблица возвращенной информации

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

Примечание. 0xFF Представляет специальный символ, указывающий конец файла или набора данных.
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_term word
word breakersдля display_term breakers
stemmersдля display_term stemmers

Замечания

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 можно значительно понять и устранить многие другие проблемы с полнотекстовых запросов.

Разрешения

Требуется разрешение CREATE FULLTEXT CATALOG и права доступа к указанному списку стоп-слов.

Примеры

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

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

The Microsoft business analysis

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

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

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

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

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

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

français

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

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

См. также

Следующие шаги