FREETEXT (Transact-SQL)

Actualizado: 14 de abril de 2006

Es un predicado que se utiliza para buscar en columnas que contengan tipos de datos basados en caracteres de valores que coincidan con el significado y no literalmente con las palabras de la condición de búsqueda. Cuando se utiliza FREETEXT, el motor de consulta de texto realiza internamente las siguientes acciones en freetext_string, asigna a cada uno de los términos un peso y busca las coincidencias.

  • Separa la cadena en palabras individuales basándose en límites de palabras (separación de palabras).
  • Genera formas no flexionadas de las palabras (lematización).
  • Identifica una lista de expansiones o reemplazos de los términos basándose en coincidencias en el diccionario de sinónimos.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

FREETEXT ( { column_name | (column_list) | * } 
          , 'freetext_string' [ , LANGUAGE language_term ] )

Argumentos

  • column_name
    Es el nombre de la columna registrada para búsquedas de texto. Las columnas de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml y varbinary(max) son válidas para la búsqueda de texto.
  • column_list
    Indica que se pueden especificar varias columnas, separadas por una coma. column_list debe estar 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 se tienen que utilizar para buscar la freetext_string determinada. Si en la cláusula FROM hay más de una tabla, * se tiene que especificar con el nombre de la tabla. A menos que se especifique language_term, el idioma de todas las columnas 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.

    freetext_string es de tipo nvarchar. Se realiza una conversión implícita cuando se usa otro tipo de datos de carácter como entrada. En el siguiente ejemplo, la variable @SearchWord, definida como una variable de tipo varchar(30), provoca una conversión implícita en el predicado FREETEXT.

    USE AdventureWorks;
    GO
    DECLARE @SearchWord varchar(30)
    SET @SearchWord ='performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    Como el "examen de parámetros" no funciona con la conversión, use nvarchar para obtener mejor rendimiento. En el ejemplo, declare @SearchWord como nvarchar(30).

    USE AdventureWorks;
    GO
    DECLARE @SearchWord nvarchar(30)
    SET @SearchWord = N'performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    También puede usar la sugerencia de consulta OPTIMIZE FOR para los casos en los que se genera un plan subóptimo.

    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 vacía 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. Si freetext_string se incluye entre comillas dobles, se realiza una búsqueda de frases coincidentes, por lo que no se extraen las desinencias ni se utiliza el diccionario de sinónimos.

  • LANGUAGE language_term
    Es el idioma cuyos recursos se van a utilizar para separar palabras, extraer desinencias, aplicar el diccionario de sinónimos y quitar palabras vacías como parte de la consulta FREETEXT. Este parámetro es opcional y puede especificarse como valor hexadecimal, entero o cadena 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 de la columna.

    Si el valor especificado es una cadena, language_term corresponde al valor de la columna alias de la tabla del sistema syslanguages. 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 el valor especificado es 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, Microsoft SQL Server devuelve un error. Para utilizar recursos de idioma neutral, especifique 0x0 como language_term.

Notas

Las consultas de búsqueda de texto que utilizan FREETEXT son menos precisas que las consultas de texto que utilizan CONTAINS. El motor de búsqueda de texto de SQL Server identifica las palabras y las frases importantes. No se le da significado especial a ninguna de las palabras clave reservadas o caracteres comodín que suelen tener significado cuando se especifican en el parámetro <contains_search_condition> del predicado CONTAINS.

FREETEXT 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).

Ejemplos

A. Usar FREETEXT para buscar palabras que contengan los valores de carácter especificados

En el siguiente ejemplo se buscan todos los documentos que contienen las palabras relacionadas con vital, safety, components.

USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO

B. Usar FREETEXT con variables

En el siguiente ejemplo se utiliza una variable en lugar de un término de búsqueda específico.

USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30);
SET @SearchWord = N'high-performance';
SELECT Description 
FROM Production.ProductDescription 
WHERE FREETEXT(Description, @SearchWord);
GO

Vea también

Referencia

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipos de datos (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido nuevo:
  • Se ha agregado información sobre cómo evitar la conversión con los valores de freetext_string.