sys.dm_fts_parser (Transact-SQL)

Devuelve el resultado de la tokenización final después de aplicar un separador de palabras, diccionario de sinónimos y combinación de listas de palabras irrelevantes determinados a la entrada de una cadena de consulta. El resultado de la tokenización es equivalente al que produce el motor de búsqueda de texto completo para la cadena de consulta especificada.

sys.dm_fts_parser es una función de administración dinámica.

Sintaxis

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

Argumentos

  • query_string
    Consulta que se desea analizar. query_string puede ser una cadena de tipo string que contiene (CONTAINS) compatibilidad de sintaxis. Por ejemplo, se pueden incluir formas con inflexión, un diccionario de sinónimos y operadores lógicos.

  • lcid
    Identificador de configuración regional (LCID) del separador de palabras que se va a utilizar para analizar query_string.

  • stoplist_id
    Identificador de la lista de palabras irrelevantes, si existe, que va a usar el separador de palabras identificado por lcid. stoplist_id es de tipo int. Si se especifica 'NULL', no se utiliza ninguna lista de palabras irrelevantes. Si se especifica 0, se utiliza la lista de palabras irrelevantes del sistema.

    Un identificador de lista de palabras irrelevantes es único dentro de una base de datos. Para obtener el identificador de lista de palabras irrelevantes correspondiente a un índice de texto completo en una tabla dada, use la vista de catálogo sys.fulltext_indexes.

  • accent_sensitivity
    Valor booleano que controla si la búsqueda de texto completo distingue o no los signos diacríticos. accent_sensitivity es de tipo bit, y tiene uno de los valores siguientes:

    Valor

    La distinción de acentos es…

    0

    Sin distinción

    Palabras como "café" y "cafe" se tratan de forma idéntica.

    1

    Con distinción

    Palabras como "café" y "cafe" se tratan de forma diferente.

    [!NOTA]

    Para ver la configuración actual de este valor para un catálogo de texto completo, ejecute la instrucción de Transact-SQL siguiente: SELECT fulltextcatalogproperty('nombre_de_catálogo', 'AccentSensitivity');.

Tabla devuelta

Nombre de la columna

Tipo de datos

Descripción

keyword

varbinary(128)

Representación hexadecimal de una palabra clave determinada devuelta por un separador de palabras. Esta representación se utiliza para almacenar la palabra clave en el índice de texto completo. Este valor no es legible, pero resulta útil para relacionar una palabra clave determinada con resultados devueltos por otras vistas de administración dinámica que devuelven el contenido de un índice de texto completo, como sys.dm_fts_index_keywords y sys.dm_fts_index_keywords_by_document.

NotaNota
OxFF representa el carácter especial que indica el final de un archivo o conjunto de datos.

group_id

int

Contiene un valor entero que es útil para diferenciar el grupo lógico a partir del cual se generó un término determinado. Por ejemplo, 'Server AND DB OR FORMSOF(THESAURUS, DB)"' genera los valores de group_id siguientes en inglés:

group_id display_term
1Server
2DB
3DB

phrase_id

int

Contiene un valor entero que resulta útil para diferenciar los casos en los que el separador de palabras emite formatos alternativos de palabras compuestas, tales como texto completo. A veces, con la presencia de palabras compuestas ('multi-million') el separador de palabras emite formatos alternativos. En ocasiones, es necesario diferenciar estos formatos alternativos (frases).

Por ejemplo, 'multi-million' genera los valores de phrase_id siguientes en inglés:

phrase_id display_term
1 multi
1 million
2 multimillion

occurrence

int

Indica el orden de cada término en el resultado del análisis. Por ejemplo, para la repetición de la frase "SQL Server query processor", contendría los valores de repetición siguientes para los términos de la frase, en inglés:

occurrence display_term
1 SQL
2 Server
3 query
4 processor

special_term

nvarchar(8000)

Contiene información sobre las características del término que el separador de palabras emite; por ejemplo:

Coincidencia exacta

Palabra irrelevante

Fin de frase

Fin de párrafo

Fin de capítulo

display_term

nvarchar(8000)

Contiene el formato legible de la palabra clave. Al igual que con las funciones diseñadas para tener acceso al contenido del índice de texto completo, este término mostrado podría no ser idéntico al original, debido a la limitación de la desnormalización. Sin embargo, debería ser suficientemente preciso para ayudar a identificarlo con respecto a la entrada original.

expansion_type

int

Contiene información sobre la naturaleza de la expansión de un término determinado; a saber:

0 =caso de una sola palabra

2=expansión con inflexión

4=expansión o sustitución de diccionario de sinónimos

Por ejemplo, considere un caso en que el diccionario de sinónimos define run como una expansión de jog:

<expansion>

<sub>run</sub>

<sub>jog</sub>

</expansion>

El término FORMSOF (FREETEXT, run) genera la salida siguiente:

run con expansion_type=0

runs con expansion_type=2

running con expansion_type=2

ran con expansion_type=2

jog con expansion_type=4

source_term

nvarchar(8000)

Término o frase a partir de la cual se generó o analizó un término determinado. Por ejemplo, una consulta de '"word breakers" AND stemmers' genera los valores de source_term siguientes en inglés:

source_term display_term
word breakersword
word breakersbreakers
stemmersstemmers

Notas

sys.dm_fts_parser admite la sintaxis y las características de predicados de texto completo, como CONTAINS y FREETEXT, y funciones, como CONTAINSTABLE y FREETEXTTABLE.

Usar Unicode para analizar caracteres especiales

Cuando se analiza una cadena de consulta, sys.dm_fts_parser usa la intercalación de la base de datos a la que se está conectado, a menos que se especifique la cadena de consulta como Unicode. Por tanto, para una cadena no Unicode que contenga caracteres especiales, como ü o ç, el resultado puede ser inesperado, dependiendo de la intercalación de la base de datos. Para procesar una cadena de consulta sin tener en cuenta la intercalación de la base de datos, anteponga a la cadena N, es decir, N'query_string'.

Para obtener más información, vea "C. Mostrar el resultado de una cadena que contiene caracteres especiales", más adelante en este tema.

Cuándo usar sys.dm_fts_parser

sys.dm_fts_parser puede resultar muy eficaz para la depuración. Algunos de los escenarios de uso principales son:

  • Entender cómo trata un separador de palabras determinado una entrada dada

    Cuando una consulta devuelve resultados inesperados, una causa probable es la manera en que el separador de palabras está analizando y dividiendo los datos. Mediante sys.dm_fts_parser, se puede saber el resultado que un separador de palabras pasa al índice de texto completo. Además, se puede ver qué términos son palabras irrelevantes, que no se buscan en el índice de texto completo. El que un término sea una palabra irrelevante para un idioma determinado depende de si está en la lista de palabras irrelevantes especificada por el valor stoplist_id que se declara en la función.

    Tenga en cuenta también el marcador de distinción de acentos, que permitirá al usuario ver cómo el separador de palabras analizará la entrada teniendo en cuenta esta información.

  • Entender cómo funciona el lematizador en una entrada determinada

    Puede averiguar cómo el separador de palabras y el lematizador analizan un término de la consulta y sus formas de lematización especificando una consulta CONTAINS o CONTAINSTABLE que contenga la cláusula FORMSOF siguiente:

    FORMSOF( INFLECTIONAL, query_term )
    

    Los resultados indican qué términos se pasan al índice de texto completo.

  • Entender cómo el diccionario de sinónimos expande o reemplaza la totalidad o una parte de la entrada

    También puede especificar:

    FORMSOF( THESAURUS, query_term )
    

    Los resultados de esta consulta muestran cómo interactúan el separador de palabras y el diccionario de sinónimos para el término de la consulta. Puede ver la expansión o los reemplazos del diccionario de sinónimos, e identificar la consulta resultante que se emite realmente frente al índice de texto completo.

    Tenga en cuenta que si el usuario emite

    FORMSOF( FREETEXT, query_term )
    

    Las funciones de identificación de formas flexivas y diccionario de sinónimos se ejecutarán automáticamente.

Además de los escenarios de uso anteriores, sys.dm_fts_parser puede ayudar significativamente a entender y solucionar muchos otros problemas de la consulta de texto completo.

Permisos

Requiere la pertenencia a la función fija de servidor sysadmin y la posesión de derechos de acceso a la lista de palabras irrelevantes especificada.

Ejemplos

A. Mostrar el resultado de un separador de palabras determinado para una palabra clave o una frase

En el ejemplo siguiente se devuelve el resultado obtenido cuando se usa el separador de palabras en inglés, cuyo LCID es 1033, y no se utiliza ninguna lista de palabras irrelevantes en la cadena de consulta siguiente:

The Microsoft business analysis

La distinción de acentos está deshabilitada.

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

B. Mostrar el resultado de un separador de palabras determinado en el contexto de filtrado de la lista de palabras irrelevantes

En el ejemplo siguiente se devuelve el resultado de utilizar el separador de palabras en inglés, cuyo LCID es 1033, y una lista de palabras irrelevantes en inglés, cuyo identificador es 77, en la cadena de consulta siguiente:

"The Microsoft business analysis" OR "MS revenue"

La distinción de acentos está deshabilitada.

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

C. Mostrar el resultado de una cadena que contiene caracteres especiales

En el ejemplo siguiente, se usa Unicode para analizar la cadena francesa siguiente:

français

En el ejemplo, se especifica el LCID para el idioma francés, 1036 y el identificador de una lista de palabras irrelevantes definida por el usuario, 5. La distinción de acentos está habilitada.

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