sys.dm_fts_parser (Transact-SQL)

Retorna o resultado final da geração de tokens após a aplicação de uma determinada combinação separador de palavras, dicionário de sinônimos e lista de palavras irrelevantes a uma entrada de cadeia de caracteres de consulta. O resultado da geração de tokens é equivalente à saída do Mecanismo de Texto Completo para a cadeia de caracteres de consulta especificada.

sys.dm_fts_parser é uma função de gerenciamento dinâmico.

Sintaxe

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

Argumentos

  • query_string
    A consulta que você deseja analisar. query_string pode ser uma cadeia de caracteres aceita pela sintaxe CONTAINS. Por exemplo, é possível incluir formas flexionadas, uma dicionário de sinônimo e operadores lógicos.

  • lcid
    O identificador de localidade (LCID) do separador de palavras que será usado para analisar query_string.

  • stoplist_id
    ID da lista de palavras irrelevantes, se houver alguma, que será usada pelo separador de palavras identificada por lcid. stoplist_id é int. Se você especificar 'NULL', nenhuma lista de palavras irrelevantes será usada. Se especificar 0, será usada a LISTA DE PALAVRAS IRRELEVANTES do sistema.

    Uma ID da lista de palavras irrelevantes é exclusiva em um banco de dados. Para obter a ID da lista de palavras irrelevantes de um índice de texto completo em uma determinada tabela, use a exibição do catálogo sys.fulltext_indexes.

  • accent_sensitivity
    Valor Booliano que controla se a pesquisa de texto completo diferencia ou não diacríticos. accent_sensitivity é bit, com um dos seguintes valores:

    Valor

    Diferencia acentos?

    0

    Não diferencia

    Palavras como "café" e "cafe" são tratadas da mesma forma.

    1

    Diferencia

    Palavras como "café" e "cafe" são tratadas de forma diferente.

    ObservaçãoObservação

    Para exibir a configuração atual desse valor para um catálogo de texto completo, execute a seguinte instrução Transact-SQL: SELECT fulltextcatalogproperty('catalog_name', 'AccentSensitivity');.

Tabela Retornada

Nome da coluna

Tipo de dados

Descrição

keyword

varbinary(128)

A representação hexadecimal de uma determinada palavra-chave retornada por um separador de palavras. Essa representação é usada para armazenar a palavra-chave no índice de texto completo. Esse valor não pode ser compreendido pelo usuário, mas é útil para relacionar uma determinada palavra-chave à saída retornada por outras exibições de gerenciamento dinâmico que retornam o conteúdo de um índice de texto completo, como sys.dm_fts_index_keywords e sys.dm_fts_index_keywords_by_document.

ObservaçãoObservação
OxFF representa o caractere especial que indica o término de um arquivo ou conjunto de dados.

group_id

int

Contém um valor de inteiro que é útil para diferenciar o grupo lógico a partir do qual um determinado termo foi gerado. Por exemplo, 'Server AND DB OR FORMSOF(THESAURUS, DB)"' produz os seguintes valores group_id em inglês:

group_id display_term
1Servidor
2DB
3DB

phrase_id

int

Contém um valor inteiro que é útil para diferenciar os casos em que formas alternativas de palavras compostas, como texto completo, são geradas pelo separador de palavras. Às vezes, devido à existência de palavras compostas ('multi-million'), formas alternativas são geradas pelo separador de palavras. Às vezes, essas formas alternativas (frases) precisam ser diferenciadas.

Por exemplo, 'multi-million' produz os seguintes valores phrase_id em inglês:

phrase_id display_term
1 multi
1 million
2 multimillion

occurrence

int

Indica a ordem de cada termo no resultado da análise. Por exemplo, a frase "SQL Server query processor" occurrence poderia conter os seguintes valores occurrence para os termos da frase em inglês:

ocorrência display_term
1 SQL
2 Server
3 query
4 processor

special_term

nvarchar(4000)

Contém informações sobre as características do termo que está sendo emitido pelo separador de palavras, um destes:

Correspondência exata

Palavra de ruído

Fim de oração

Fim de parágrafo

Fim de capítulo

display_term

nvarchar(4000)

Contém a forma legível da palavra-chave. Como ocorre com as funções criadas para acessar o conteúdo do índice de texto completo, esse termo exibido pode não ser idêntico ao termo original por motivo de limitação de desnormalização. No entanto, ele precisar ser preciso o suficiente para ajudar você a identificá-lo da entrada original.

expansion_type

int

Contém informações sobre a natureza da expansão de um determinado termo, um destes:

0 = Palavra única

2 = Expansão flexional

4 = Expansão/substituição do dicionário de sinônimos

Por exemplo, considere um caso no qual o dicionário de sinônimos define a execução como uma expansão de jog:

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

O termo FORMSOF (FREETEXT, run) gera a seguinte saída:

run com expansion_type=0

runs com expansion_type=2

running com expansion_type=2

ran com expansion_type=2

jog com expansion_type=4

source_term

nvarchar(4000)

O termo ou frase a partir do qual um determinado termo foi gerado ou analisado. Por exemplo, uma consulta no "'word breakers" AND stemmers' produz os seguintes valores source_term em inglês:

source_term display_term
word breakersword
word breakersbreakers
stemmersstemmers

Comentários

O sys.dm_fts_parser dá suporte à sintaxe e aos recursos de predicados de texto completo, como CONTAINS e FREETEXT, e funções como CONTAINSTABLE e FREETEXTTABLE.

Usando o Unicode para analisar caracteres especiais

Quando você analisar uma cadeia de caracteres de consulta, sys.dm_fts_parser usa o agrupamento do banco de dados ao qual você está conectado, a menos que especifique a cadeia de caracteres de consulta como Unicode. No entanto, para uma cadeia de caracteres não Unicode que contém caracteres especiais, como ü ou ç, a saída pode ser inesperada, dependendo do agrupamento do banco de dados. Para processar uma cadeia de caracteres da consulta independentemente do agrupamento de banco de dados, anteponha a cadeia de caracteres com N, ou seja, N'query_string'.

Para obter mais informações, consulte “C. Exibindo a saída de uma cadeia de caracteres que contém caracteres especiais", posteriormente neste tópico.

Quando usar sys.dm_fts_parser

O sys.dm_fts_parser pode ser muito poderoso para fins de depuração. Alguns dos principais cenários de uso incluem:

  • Para entender como um determinado separador de palavras trata uma certa entrada

    Quando uma consulta retorna resultados inesperados, uma causa provável é a maneira como o separador de palavras está analisando e separando os dados. Ao usar sys.dm_fts_parser, você descobre o resultado que um separador de palavras passa para o índice de texto completo. Além disso, você pode consultar quais termos são palavras irrelevantes, que não são pesquisadas no índice de texto completo. Um termo é ou não uma palavra irrelevante em um dado idioma dependendo de estar ou não na lista de palavras irrelevantes especificada pelo valor stoplist_id que é declarado na função.

    Observe também o sinalizador de distinção de acento, que permitirá o usuário ver como o separador de palavras analisará a entrada tendo considerando as informações de distinção de acentos.

  • Para entender como o lematizador funciona em uma determinada entrada

    Você pode saber como o separador de palavras e o lematizador analisam um termo da consulta e suas formas lematizadoras especificando uma consulta CONTAINS ou CONTAINSTABLE contendo a cláusula FORMSOF a seguir:

    FORMSOF( INFLECTIONAL, query_term )
    

    Os resultados indicam quais termos estão sendo passados ao índice de texto completo.

  • Para entender como o dicionário de sinônimos expande ou substitui toda a entrada ou parte dela

    Você também pode especificar:

    FORMSOF( THESAURUS, query_term )
    

    O resultado dessa consulta mostra como o separador de palavras e o dicionário de sinônimos interagem com relação ao termo da consulta. É possível ver a expansão ou as substituições feitas a partir do dicionário de sinônimos e identificar a consulta resultante que está sendo emitida para o índice de texto completo.

    Observe que se o usuário emitir:

    FORMSOF( FREETEXT, query_term )
    

    Os recursos de flexão e de dicionário de sinônimos ocorrerão automaticamente.

Além dos cenários de uso anteriores, sys.dm_fts_parser pode ajudar consideravelmente a entender e solucionar vários outros problemas relacionados a consultas de texto completo.

Permissões

Requer associação à função de servidor fixa sysadmin e direitos de acesso à lista de palavras irrelevantes especificada.

Exemplos

A. Exibindo a saída de um determinado separador de palavras para uma palavra-chave ou frase

O exemplo a seguir retorna a saída a partir do uso do separador de palavras em inglês, cujo LCID é 1033, e nenhuma lista de palavras irrelevantes na cadeia de caracteres de consulta a seguir:

The Microsoft business analysis

A distinção de acentos foi desabilitada.

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

B. Exibindo a saída de um determinado separador de palavras no contexto de filtro da lista de palavras irrelevantes

O exemplo a seguir retorna a saída a partir do uso do separador de palavras em inglês, cujo LCID é 1033, uma lista de palavras irrelevantes em inglês, cuja ID é 77, na cadeia de caracteres de consulta a seguir:

"The Microsoft business analysis" OR "MS revenue"

A distinção de acentos foi desabilitada.

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0)

C. Exibindo a saída de uma cadeia de caracteres que contém caracteres especiais

O exemplo a seguir usa o Unicode para analisar a cadeia de caracteres franceses a seguir:

français

O exemplo especifica o LCID do idioma francês 1036 e a ID de uma lista de palavras irrelevantes definida pelo usuário 5. A distinção de acentos está habilitada.

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