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('имя_каталога', '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_iddisplay_term
1Server
2DB
3DB
|
phrase_id |
int |
Содержит целочисленное значение, помогающее различать варианты альтернативных форм составных слов, формируемые средством разбиения по словам, таким средствам, как полнотекстовой поиск. Иногда составные слова (например, «multi-million») определяются средством разбиения по словам в нескольких альтернативных формах. Эти альтернативные формы (фразы) необходимо как-то различать. Например, строка multi-million формирует следующие значения phrase_id для английского языка.
phrase_iddisplay_term
1 multi
1 million
2 multimillion
|
occurrence |
int |
Указывает расположение каждого термина в результате анализа. Например, для фразы SQL Server query processor вхождение будет содержать следующие значения вхождения терминов из фразы для английского языка.
occurrencedisplay_term
1 SQL
2 Server
3 query
4 processor
|
special_term |
nvarchar(8000) |
Содержит сведения о характеристиках термина, выданного средством разбиения по словам, в том числе: точное совпадение; пропускаемое слово; конец предложения; конец абзаца; конец раздела. |
display_term |
nvarchar(8000) |
Содержит немашинную (предназначенную для человека) форму ключевого слова. Как и в случае с функциями, предназначенными для доступа к содержимому полнотекстового индекса, этот отображаемый термин может не быть идентичным исходному термину в силу ограниченности денормализации. Однако он должен быть достаточно точным, чтобы позволить отличить его от исходных входных данных. |
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(8000) |
Термин или фраза, из которой сформирован или создан в результате анализа данный термин. Например, запрос для word breakers" AND stemmers' выдает следующие значения source_term для английского языка.
source_termdisplay_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)
В. Отображение выходных данных строки, которая содержит специальные символы
В следующем примере для синтаксического анализа строки на французском языке используется формат Юникод:
francais
В этом примере указывается код языка для французского языка, 1036, и идентификатор стоп-слов, определенных пользователем, 5. Диакритические знаки учитываются.
SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);
См. также