FREETEXTTABLE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Es una función que se usa en la cláusula FROM de una instrucción SELECT de Transact-SQL para realizar una SQL Server búsqueda de texto completo en columnas indexadas 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 esas columnas que contienen valores que coinciden con el significado y no solo el texto exacto, del texto del freetext_string especificado. Se hace referencia a FREETEXTTABLE como si fuera un nombre de tabla normal.

FREETEXTTABLE es útil para los mismos tipos de coincidencias que 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 sobre las formas de búsqueda de texto completo que se admiten en SQL Server, vea Consulta 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 viewpuede ser un nombre de objeto de base de datos de una, dos o tres partes. Al consultar una vista, puede incluirse solo una tabla base indizada de texto completo.

table no puede especificar un nombre de servidor y no se puede usar 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) .

lista_de_columnas
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 se hayan registrado para la búsqueda de texto completo se tienen que usar para buscar la cadena_freetext determinada. A menos que se especifique language_term , el idioma de todas las columnas indizada de texto completo de la tabla debe ser el mismo.

cadena_freetext
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 en la condición de búsqueda CONTAINS, donde AND es una palabra clave, cuando se usa en freetext_string la palabra 'and' se considera una palabra irrelevante, o palabra irrelevante, y se descartará.

No se permite el uso de WEIGHT, FORMSOF, caracteres comodín, NEAR y otros elementos sintácticos. cadena_freetext 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 un valor hexadecimal, un entero o una cadena correspondiente al identificador de configuración regional (LCID) de un idioma. Si se especifica language_term, el idioma que representa se aplicará 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 dicha columna, especificar LANGUAGE language_term puede aumentar la probabilidad de una buena coincidencia.

Cuando se especifica como una cadena, language_term corresponde al valor de columna alias de la vista de compatibilidad sys.syslanguages (Transact-SQL). La cadena debe estar delimitada con comillas sencillas, como en 'language_term'. Cuando se especifica como un entero, language_term es el LCID real que identifica el idioma. Cuando 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 usar recursos de idioma neutro, especifique 0x0 como language_term.

top_n_by_rank
Especifica que solo se devuelven las ncoincidencias clasificadas más altas, en orden descendente. Solo 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 mediante la recuperación de solo los aciertos 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 CONTAINSTABLE, la tabla devuelta tiene columnas denominadas KEY y RANK, a las que se hace referencia dentro de la consulta para obtener las filas adecuadas y usar 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. Ejemplo sencillo

En el ejemplo siguiente se crea y rellena una tabla simple de dos columnas, que enumera tres condados y los colores de sus marcas. Crea y rellena un catálogo de texto completo y un índice en la tabla. A continuación, se muestra la sintaxis FREETEXTTABLE .

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. Usar FREETEXT en INNER JOIN

En el ejemplo siguiente se devuelve la descripción y la clasificación de cualquier producto con una descripción que coincida con el significado de high level of performance.

USE AdventureWorks2022;  
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  

C. 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 LANGUAGE parámetros language_term y top_n_by_rank.

USE AdventureWorks2022;  
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ámetro LANGUAGE language_term no es necesario para usar el parámetro top_n_by_rank .

Consulte también

Introducción a la búsqueda de texto completo
Crear y administrar catálogos de texto completo
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Crear y administrar índices de texto completo
Consultar con búsqueda de texto completo
Crear consultas de búsqueda de texto completo (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Funciones de conjuntos de filas (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
precompute rank (opción de configuración del servidor)
Comparación de características de Azure SQL Database y Azure SQL Managed Instance