FREETEXT (Transact-SQL)FREETEXT (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Es un predicado que se usa en la cláusula WHERE de Transact-SQLTransact-SQL de una instrucción SELECT de Transact-SQLTransact-SQL para realizar una búsqueda de texto completo de SQL ServerSQL Server en las columnas indexadas de texto completo que contienen tipos de datos basados en caracteres.Is a predicate used in the Transact-SQLTransact-SQL WHERE clause of a Transact-SQLTransact-SQL SELECT statement to perform a SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types. 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.This predicate searches for values that match the meaning and not just the exact wording of the words in the search condition. Cuando se usa FREETEXT, el motor de consultas de texto completo realiza internamente las siguientes acciones en cadena_freetext, asigna a cada uno de los términos una ponderación y busca las coincidencias:When FREETEXT is used, the full-text query engine internally performs the following actions on the freetext_string, assigns each term a weight, and then finds the matches:

  • Separa la cadena en palabras individuales basándose en límites de palabras (separación de palabras).Separates the string into individual words based on word boundaries (word-breaking).

  • Genera formas no flexionadas de las palabras (lematización).Generates inflectional forms of the words (stemming).

  • Identifica una lista de expansiones o reemplazos de los términos basándose en coincidencias en el diccionario de sinónimos.Identifies a list of expansions or replacements for the terms based on matches in the thesaurus.

Nota

Para obtener información sobre las formas de búsqueda de texto completo que se admiten en SQL ServerSQL Server, vea Consulta con búsqueda de texto completo.For information about the forms of full-text searches that are supported by SQL ServerSQL Server, see Query with Full-Text Search.

Se aplica a: SQL ServerSQL Server (desde SQL Server 2008SQL Server 2008 hasta la versión actual).Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version).

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

column_namecolumn_name
Es el nombre de una o varias columnas indizadas de texto completo de la tabla especificada en la cláusula FROM.Is the name of one or more full-text indexed columns of the table specified in the FROM clause. Las columnas pueden ser de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

lista_de_columnascolumn_list
Indica que se pueden especificar varias columnas, separadas por una coma.Indicates that several columns, separated by a comma, can be specified. column_list debe ir entre paréntesis.column_list must be enclosed in parentheses. A menos que se especifique language_term, el idioma de todas las columnas de column_list debe ser el mismo.Unless language_term is specified, the language of all columns of column_list must be the same.

*
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.Specifies that all columns that have been registered for full-text searching should be used to search for the given freetext_string. Si en la cláusula FROM hay más de una tabla, * se tiene que especificar con el nombre de la tabla.If more than one table is in the FROM clause, * must be qualified by the table name. A menos que se especifique language_term, el idioma de todas las columnas de la tabla debe ser el mismo.Unless language_term is specified, the language of all columns of the table must be the same.

cadena_freetextfreetext_string
Es el texto que se va a buscar en column_name.Is text to search for in the column_name. Se puede escribir cualquier texto, incluidas palabras, frases y oraciones.Any text, including words, phrases or sentences, can be entered. 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.Matches are generated if any term or the forms of any term is found in the full-text index.

A diferencia de lo que sucede en la condición de búsqueda CONTAINS y CONTAINSTABLE, donde AND es una palabra clave, cuando la palabra "and" se usa en cadena_freetext, se considera una palabra irrelevante y no se tiene en cuenta.Unlike in the CONTAINS and CONTAINSTABLE search condition where AND is a keyword, when used in freetext_string the word 'and' is considered a noise word, or stopword, and will be discarded.

No se permite el uso de WEIGHT, FORMSOF, caracteres comodín, NEAR y otros elementos sintácticos.Use of WEIGHT, FORMSOF, wildcards, NEAR and other syntax is not allowed. cadena_freetext se separa en palabras, de las que se extraen las desinencias y se pasan por el diccionario de sinónimos.freetext_string is wordbroken, stemmed, and passed through the thesaurus.

cadena_freetext es de tipo nvarchar.freetext_string is nvarchar. Se realiza una conversión implícita cuando se usa otro tipo de datos de carácter como entrada.An implicit conversion occurs when another character data type is used as input. No se pueden usar los tipos de datos de cadena grande varchar(max) y nvarchar(max).Large string data types nvarchar(max) and varchar(max) cannot be used. 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.In the following example, the @SearchWord variable, which is defined as varchar(30), causes an implicit conversion in the FREETEXT predicate.

  
USE AdventureWorks2012;  
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 lograr un mejor rendimiento.Because "parameter sniffing" does not work across conversion, use nvarchar for better performance. En el ejemplo, declare @SearchWord como nvarchar(30).In the example, declare @SearchWord as 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.You can also use the OPTIMIZE FOR query hint for cases in which a nonoptimal plan is generated.

LANGUAGE language_termLANGUAGE 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.Is the language whose resources will be used for word breaking, stemming, and thesaurus and stopword removal as part of the query. 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.This parameter is optional and can be specified as a string, integer, or hexadecimal value corresponding to the locale identifier (LCID) of a language. Si se especifica language_term, el idioma que representa se aplicará a todos los elementos de la condición de búsqueda.If language_term is specified, the language it represents will be applied to all elements of the search condition. Si no se especifica ningún valor, se utiliza el idioma de texto completo de la columna.If no value is specified, the column full-text language is used.

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.If documents of different languages are stored together as binary large objects (BLOBs) in a single column, the locale identifier (LCID) of a given document determines what language is used to index its content. Al consultar este tipo de columna, especificar LANGUAGE language_term puede aumentar la probabilidad de encontrar una coincidencia acertada.When querying such a column, specifying LANGUAGE language_term can increase the probability of a good match.

Cuando se especifica como una cadena, language_term corresponde al valor de columna alias de la vista de compatibilidad sys.syslanguages (Transact-SQL).When specified as a string, language_term corresponds to the alias column value in he sys.syslanguages (Transact-SQL) compatibility view. La cadena debe estar delimitada con comillas sencillas, como en 'término_de_idioma'.The string must be enclosed in single quotation marks, as in 'language_term'. Cuando se especifica como un entero, language_term es el LCID real que identifica el idioma.When specified as an integer, language_term is the actual LCID that identifies the language. Cuando se especifica como un valor hexadecimal, language_term es 0x seguido del valor hexadecimal del LCID.When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. El valor hexadecimal no puede superar los ocho dígitos, incluidos los ceros a la izquierda.The hexadecimal value must not exceed eight digits, including leading zeros.

Si el valor está en formato DBCS (juego de caracteres de doble byte), MicrosoftMicrosoft SQL ServerSQL Server lo convertirá a Unicode.If the value is in double-byte character set (DBCS) format, MicrosoftMicrosoft SQL ServerSQL Server will convert it to Unicode.

Si el idioma especificado no es válido o no hay recursos instalados que se correspondan con ese idioma, MicrosoftMicrosoft SQL ServerSQL Server devuelve un error.If the language specified is not valid or there are no resources installed that correspond to that language, MicrosoftMicrosoft SQL ServerSQL Server returns an error. Para usar recursos de idioma neutro, especifique 0x0 como language_term.To use the neutral language resources, specify 0x0 as language_term.

Notas generalesGeneral Remarks

Los predicados y las funciones de texto completo operan en una única tabla, que se obtiene del predicado FROM.Full-text predicates and functions work on a single table, which is implied in the FROM predicate. 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.To search on multiple tables, use a joined table in your FROM clause to search on a result set that is the product of two or more tables.

Las consultas de texto completo que utilizan FREETEXT son menos precisas que las consultas de texto completo que utilizan CONTAINS.Full-text queries using FREETEXT are less precise than those full-text queries using CONTAINS. El motor de búsqueda de texto completo de SQL ServerSQL Server identifica las palabras y las frases importantes.The SQL ServerSQL Server full-text search engine identifies important words and phrases. 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 <contiene_condición_de_búsqueda> del predicado CONTAINS.No special meaning is given to any of the reserved keywords or wildcard characters that typically have meaning when specified in the <contains_search_condition> parameter of the CONTAINS predicate.

Los predicados de texto completo no se pueden usar en la cláusula OUTPUT cuando el nivel de compatibilidad de la base de datos está establecido en 100.Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100.

Nota

La función FREETEXTTABLE es útil para los mismos tipos de coincidencias que el predicado FREETEXT.The FREETEXTTABLE function is useful for the same kinds of matches as the FREETEXT predicate. Se puede hacer referencia a esta función como un nombre de tabla normal en la cláusula FROM de una instrucción SELECT.You can reference this function like a regular table name in the FROM clause of a SELECT statement. Para obtener más información, vea FREETEXTTABLE (Transact-SQL).For more information, see FREETEXTTABLE (Transact-SQL).

Consultar servidores remotosQuerying Remote Servers

Se puede usar un nombre de cuatro elementos en el predicado CONTAINS o FREETEXT para consultar columnas indexadas de texto completo de las tablas de destino en un servidor vinculado.You can use a four-part name in the CONTAINS or FREETEXT predicate to query full-text indexed columns of the target tables on a linked server. 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.To prepare a remote server to receive full-text queries, create a full-text index on the target tables and columns on the remote server and then add the remote server as a linked server.

A diferencia de la búsqueda de texto completo, el predicado LIKE de Transact-SQLTransact-SQL funciona solamente en patrones de caracteres.In contrast to full-text search, the LIKETransact-SQLTransact-SQL predicate works on character patterns only. Además, no es posible utilizar el predicado de LIKE para consultar datos binarios con formato.Also, you cannot use the LIKE predicate to query formatted binary data. 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.Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. 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 LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.

EjemplosExamples

A.A. Usar FREETEXT para buscar palabras que contengan los valores de carácter especificadosUsing FREETEXT to search for words containing specified character values

En el siguiente ejemplo se buscan todos los documentos que contienen las palabras relacionadas con vital, safety, components.The following example searches for all documents containing the words related to vital, safety, components.

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

b.B. Usar FREETEXT con variablesUsing FREETEXT with variables

En el siguiente ejemplo se utiliza una variable en lugar de un término de búsqueda específico.The following example uses a variable instead of a specific search term.

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

Consulte tambiénSee Also

Introducción a la búsqueda de texto completo Get Started with Full-Text Search
Creación y administración de catálogos de texto completo Create and Manage Full-Text Catalogs
CREATE FULLTEXT CATALOG (Transact-SQL) CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
Crear y administrar índices de texto completo Create and Manage Full-Text Indexes
Consultar con búsqueda de texto completo Query with Full-Text Search
Crear consultas de búsqueda de texto completo (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)