FREETEXTTABLE (Transact-SQL)
Es una función utilizada en la cláusula FROM de una instrucción SELECT de Transact-SQL para realizar una búsqueda de texto completo de SQL Server en las columnas indizadas de texto completo que contienen tipos de datos basados en caracteres. Esta función devuelve una tabla de cero, una o más filas para las columnas que contienen valores que coinciden con el significado, y no solo literalmente, del texto especificado en freetext_string. Se hace referencia a FREETEXTTABLE como si fuera un nombre de tabla normal.
FREETEXTTABLE es útil para los mismos tipos de coincidencias que el FREETEXT (Transact-SQL)
Las consultas que usan FREETEXTTABLE devuelven un valor de clasificación por relevancia (RANK) y una clave de texto completo (KEY) para cada fila.
[!NOTA]
Para obtener información acerca de los formatos de búsqueda de texto completo que SQL Server admite, vea Consultar con búsqueda de texto completo.
Convenciones de sintaxis de Transact-SQL
Sintaxis
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
Argumentos
table
Es el nombre de la tabla que se ha marcado para consultas de texto completo. table o viewpueden ser un nombre de objeto de base de datos de una, dos o tres partes. Al consultar una vista, solo se puede incluir una tabla base con índices de texto completo.table no puede especificar un nombre de servidor y no puede utilizarse en consultas en servidores vinculados.
column_name
Es el nombre de una o varias columnas indizadas de texto completo de la tabla especificada en la cláusula FROM. Las columnas pueden ser de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).column_list
Indica que se pueden especificar varias columnas, separadas por una coma. column_list debe ir entre paréntesis. A menos que se especifique language_term, el idioma de todas las columnas de column_list debe ser el mismo.*
Especifica que todas las columnas que hayan sido registradas para la búsqueda de texto completo se tienen que utilizar para buscar la freetext_string determinada. A menos que se especifique language_term, el idioma de todas las columnas con índices de texto completo de la tabla debe ser el mismo.freetext_string
Es el texto que se va a buscar en column_name. Se puede escribir cualquier texto, incluidas palabras, frases y oraciones. Se generarán coincidencias si se encuentra algún término o las formas de algún término en el índice de texto completo.A diferencia de lo que sucede en la condición de búsqueda CONTAINS, donde AND es una palabra clave, cuando la palabra "and" se utiliza en freetext_string, se considera una palabra irrelevante y no se tiene en cuenta.
No se permite el uso de WEIGHT, FORMSOF, caracteres comodín, NEAR y otros elementos sintácticos. freetext_string se separa en palabras, de las que se extraen las desinencias y se pasan por el diccionario de sinónimos.
LANGUAGE language_term
Es el idioma cuyos recursos se utilizarán en la separación de palabras, la lematización, los diccionarios de sinónimos y la eliminación de palabras irrelevantes como parte de la consulta. Este parámetro es opcional y puede especificarse como valor de cadena, entero o hexadecimal correspondiente al identificador de configuración regional (LCID) de un idioma. Si se especifica language_term, el idioma que representa se aplica a todos los elementos de la condición de búsqueda. Si no se especifica ningún valor, se utiliza el idioma de texto completo de la columna.Si se almacenan juntos documentos de idiomas diferentes como objetos binarios grandes (BLOB) en una sola columna, el identificador de configuración regional (LCID) de un documento determinado determina qué idioma se usa para indizar su contenido. Al consultar este tipo de columna, especificar LANGUAGE language_term puede aumentar la probabilidad de encontrar una coincidencia acertada.
Si el valor especificado es una cadena, language_term corresponde al valor de columna alias de la vista de compatibilidad sys.syslanguages (Transact-SQL). La cadena debe ir entre comillas simples, como en 'language_term'. Si el valor especificado es un entero, language_term es el LCID real que identifica el idioma. Si se especifica como un valor hexadecimal, language_term es 0x seguido del valor hexadecimal del LCID. El valor hexadecimal no puede superar los ocho dígitos, incluidos los ceros a la izquierda.
Si el valor está en formato DBCS (juego de caracteres de doble byte), Microsoft SQL Server lo convertirá a Unicode.
Si el idioma especificado no es válido o no hay recursos instalados que se correspondan con dicho idioma, SQL Server devuelve un error. Para utilizar los recursos de idioma neutro, especifique 0x0 como language_term.
top_n_by_rank
Especifica que solamente se devuelvan las ncoincidencias con una clasificación más alta, en orden descendente. Solamente se aplica cuando se especifica un valor entero, n. Si se combina top_n_by_rank con otros parámetros, es posible que la consulta devuelva menos filas de las que en realidad coinciden con todos los predicados. top_n_by_rank permite aumentar el rendimiento de las consultas recuperando solamente las coincidencias más relevantes.
Comentarios
Los predicados y las funciones de texto completo operan en una única tabla, que se obtiene del predicado FROM. Para buscar en varias tablas, utilice una tabla combinada en la cláusula FROM a fin de buscar en un conjunto de resultados que sea el producto de dos o más tablas.
FREETEXTTABLE utiliza las mismas condiciones de búsqueda que el predicado FREETEXT.
Al igual que en CONTAINSTABLE, la tabla devuelta tiene las columnas KEY y RANK, a las que se hace referencia en la consulta para obtener las filas apropiadas y utilizar los valores de clasificación de filas.
Permisos
Solo los usuarios que dispongan de los privilegios SELECT adecuados para la tabla especificada o las columnas de la tabla a las que se haga referencia pueden llamar a FREETEXTTABLE.
Ejemplos
A.Usar FREETEXT en INNER JOIN
En el ejemplo siguiente se devuelve el nombre y la descripción de todas las categorías relacionadas con sweet, candy, bread, dry o meat.
USE AdventureWorks2012
GO
SELECT FT_TBL.Description
,KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE(Production.ProductDescription,
Description,
'high level of performance') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY RANK DESC
GO
B.Especificar las coincidencias con una clasificación más alta y el idioma
El ejemplo siguiente es idéntico y muestra el uso de los parámetros LANGUAGE language_term y top_n_by_rank .
USE AdventureWorks2012
GO
SELECT FT_TBL.Description
,KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE(Production.ProductDescription,
Description,
'high level of performance',
LANGUAGE N'English', 2) AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY RANK DESC
GO
[!NOTA]
El parámetr o LANGUAGE language_term no es necesario para utilizar el parámetro top_n_by_rank .
Vea también
Tasks
Crear consultas de búsqueda de texto completo (Visual Database Tools)
Referencia
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Funciones de conjuntos de filas (Transact-SQL)
Conceptos
Introducción a la búsqueda de texto completo
Crear y administrar catálogos de texto completo
Crear y administrar índices de texto completo