FREETEXT (Transact-SQL)

 

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)noBase de datos SQL de AzurenoAlmacenamiento de datos SQL de Azure noAlmacenamiento de datos paralelos

Es un predicado utilizado en el Transact-SQL cláusula WHERE de un Transact-SQL instrucción SELECT para realizar un SQL Server búsqueda de texto completo en texto completo indizadas las columnas que contienen tipos de datos basados en caracteres. Este predicado busca valores que coincidan con el significado y no solo con la redacción exacta de las palabras en la condición de búsqueda. Cuando se utiliza FREETEXT, el motor de consultas de texto completo realiza internamente las siguientes acciones en el freetext_string, asigna cada 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.

System_CAPS_ICON_note.jpg Nota


Para obtener información acerca de las formas de búsquedas de texto completo que son compatibles con SQL Server, consulte consultar con búsqueda de texto completo.

Se aplica a: SQL Server (desdeSQL Server 2008 hasta la versión actual).

Topic link icon Convenciones de sintaxis de Transact-SQL

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

column_name
Es el nombre de una o varias columnas indizadas de texto completo de la tabla especificada en la cláusula FROM. The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or 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 language_term se especifica, el idioma de todas las columnas de column_list debe ser el mismo.

*
Especifica que todas las columnas que se han registrado para la búsqueda de texto completo se deben usar para buscar el determinado freetext_string. Si más de una tabla está en la cláusula FROM, * debe calificar el nombre de tabla. A menos que language_term se especifica, el idioma de todas las columnas de la tabla debe ser el mismo.

freetext_string
Es el texto que desea buscar en el 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 CONTAINS y CONTAINSTABLE buscar condición where y es una palabra clave, cuando se utiliza en freetext_string la palabra 'y' se considera una palabra irrelevante, o palabra irrelevantey se descartarán.

No se permite el uso de WEIGHT, FORMSOF, caracteres comodín, NEAR y otros elementos sintácticos. freetext_string desinencias, base coincidirá y pasa el diccionario de sinónimos.

freetext_string es 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 AdventureWorks2012;  
GO  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Dado que "examen de parámetros" no funciona con la conversión, utilice nvarchar para mejorar el rendimiento. En el ejemplo, declare @SearchWord como nvarchar(30).

  
USE AdventureWorks2012;  
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 que se genera un plan que no es óptimo.

IDIOMA 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 language_term se especifica, se aplicará el idioma que representa 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 LENGUAJElanguage_term puede aumentar la probabilidad de encontrar una coincidencia acertada.

Cuando se especifica como una cadena, language_term corresponde a la alias valor de columna sys.syslanguages (Transact-SQL) vista de compatibilidad. La cadena debe incluirse entre comillas simples, 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 0 x 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 de caracteres de doble byte (DBCS), set, Microsoft SQL Server lo convertirá a Unicode.

Si el idioma especificado no es válido o no hay recursos instalados que se corresponden con dicho idioma, Microsoft SQL Server devuelve un error. Para usar los recursos de idioma neutro, especifique 0 x 0 como language_term.

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.

Las consultas de texto completo que utilizan FREETEXT son menos precisas que las consultas de texto completo que utilizan CONTAINS. El motor de búsqueda de texto completo 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.

Predicados de texto completo no están permitidos en el cláusula OUTPUT cuando el nivel de compatibilidad de base de datos se establece en 100.

System_CAPS_ICON_note.jpg Nota


La función FREETEXTTABLE es útil para los mismos tipos de coincidencias que el predicado FREETEXT. Puede hacer referencia a esta función como un nombre de tabla normal en el cláusula FROM de una instrucción SELECT. Para obtener más información, consulte FREETEXTTABLE (Transact-SQL).

Puede usar un nombre de cuatro partes en el CONTAINS o predicado FREETEXT para consultar el texto completo indizadas columnas de las tablas de destino en un servidor vinculado. Para preparar un servidor remoto para recibir consultas de texto completo, es necesario crear un índice de texto completo en las tablas y columnas de destino en el servidor remoto y, posteriormente, agregar el servidor remoto como un servidor vinculado.

A diferencia de la búsqueda de texto completo, el predicado LIKE de Transact-SQL funciona solamente en patrones de caracteres. Además, no es posible utilizar el predicado de LIKE para consultar datos binarios con formato. Por otro lado, una consulta LIKE contra una cantidad grande de datos de texto no estructurados es mucho más lenta que una consulta de texto completo equivalente contra los mismos datos. Una consulta LIKE realizada en millones de filas de datos de texto puede tardar minutos en devolver resultados, mientras que una consulta de texto completo en los mismos datos puede tardar únicamente segundos, en función del número de filas que se devuelvan.

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 AdventureWorks2012;  
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 AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30);  
SET @SearchWord = N'high-performance';  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
GO  

Empezar a trabajar con búsqueda de texto completo
Crear y administrar catálogos de texto completo
CREAR el catálogo de texto completo (Transact-SQL)
CREAR el índice de texto completo (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)
CONTIENE (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipos de datos (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
DONDE (Transact-SQL)

Adiciones de comunidad

AGREGAR
Mostrar: