FREETEXTTABLE (Transact-SQL)

Devuelve una tabla de cero, una o más filas para las columnas que contienen datos de tipo carácter cuyos valores coinciden con el significado, aunque no literalmente, del texto especificado en freetext_string. Sólo se puede hacer referencia a FREETEXTTABLE en la cláusula FROM de las instrucciones SELECT, como un nombre de tabla normal.

Las consultas que utilizan FREETEXTTABLE son consultas de texto completo libre que devuelven un valor de clasificación por importancia (RANK) y una clave de texto completo (KEY) para cada fila.

Icono de vínculo a temasConvenciones 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 el nombre de un objeto de base de datos de una, dos o tres partes. Al consultar una vista, sólo 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 se debe incluir 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 LANGUAGElanguage_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 tener más de 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 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 top_n_by_rank se combina con otros parámetros, la consulta podría devolver menos filas de las que en realidad coinciden con todos los predicados. top_n_by_rank permite aumentar el rendimiento de las consulta 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.

FREETEXTTABLE no se reconoce como palabra clave si el nivel de compatibilidad es inferior a 70. Para obtener más información, vea sp_dbcmptlevel (Transact-SQL).

Permisos

Sólo 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

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.

Nota

Para ejecutar este ejemplo, tendrá que instalar la base de datos Northwind. Para obtener información acerca de cómo instalar la base de datos Northwind, vea Descargar las bases de datos de ejemplo Northwind y pubs.

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

El ejemplo siguiente es idéntico y muestra el uso de los parámetros LANGUAGElanguage_term y top_n_by_rank .

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat',LANGUAGE 'English',2) 
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

Nota

El parámetr o LANGUAGE language_term no es necesario para utilizar el parámetro top_n_by_rank .