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 usar 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 usa ninguna lista de palabras irrelevantes. Si se especifica 0, se usa 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('catalog_name', 'AccentSensitivity');.
Tabla devuelta
Nombre de 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 usa 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.
Nota
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", occurrence contendría los valores de occurrence 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(4000) |
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(4000) |
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(4000) |
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
|
Comentarios
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 ser muy eficaz para los efectos de 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 la marca 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 al rol fijo 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 usa 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 usar 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);
Vea también