sys.dm_fts_parser (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

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

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

Syntax

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— интеллект. Если указать 'NULL', стоп-лист не используется. Если указать 0, используется система STOPLIST .

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

accent_sensitivity

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

Ценность Чувствительность акцента ...
0 Не учитывать

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

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

Note

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

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

Название столбца Тип данных Description
keyword 1 varbinary(128) Шестнадцатеричное представление данного ключевого слова, возвращенное средством разбиения по словам. Это представление используется для хранения ключевых слов в полнотекстовом индексе. Это значение не читается человеком, но полезно для связи заданного ключевого слова с результатом, возвращаемым другими динамичными управленческими представлениями, возвращающими содержимое полнотекстового индекса, такими как sys.dm_fts_index_keywords и sys.dm_fts_index_keywords_by_document.
group_id int Содержит целочисленное значение, помогающее различить логическую группу, из которой был сформирован данный термин. Например, Server AND DB OR FORMSOF(THESAURUS, DB) на английском языке получаются следующие group_id значения:

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

10xFF обозначает специальный символ, указывающий на конец файла или набора данных.

Замечания

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

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

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

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

Когда следует использовать sys.dm_fts_parser

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

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

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

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

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

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

    FORMSOF ( INFLECTIONAL, <query_term> )
    

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

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

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

    FORMSOF ( THESAURUS, <query_term> )
    

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

    Если пользователь выдает следующие проблемы:

    FORMSOF ( FREETEXT, <query_term> )
    

    Возможности инлекционных и тезаурусов происходят автоматически.

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

Permissions

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

Examples

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

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