Crear y administrar índices de texto completoCreate and Manage Full-Text Indexes

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

En este tema se describe cómo crear, rellenar y administrar índices de texto completo en SQL Server.This topic describes how to create, populate, and manage full-text indexes in SQL Server.

Requisito previo: crear un catálogo de texto completoPrerequisite - Create a full-text catalog

Antes de poder crear un índice de texto completo, necesita tener un catálogo de texto completo.Before you can create a full-text index, you have to have a full-text catalog. El catálogo es un contenedor virtual de uno o más índices de texto completo.The catalog is a virtual container for one or more full-text indexes. Para obtener más información, vea Create and Manage Full-Text Catalogs (Crear y administrar catálogos de texto completo).For more info, see Create and Manage Full-Text Catalogs.

Crear, modificar o quitar un índice de texto completoCreate, alter, or drop a full-text index

Crear un índice de texto completoCreate a full-text index

Alterar un índice de texto completoAlter a full-text index

Quitar un índice de texto completoDrop a full-text index

Rellenar un índice de texto completoPopulate a full-text index

El proceso para crear y mantener un índice de texto completo se denomina rellenado (o rastreo).The process of creating and maintaining a full-text index is called a population (also known as a crawl). Hay tres tipos de rellenado de índice de texto completo:There are three types of full-text index population:

  • Rellenado completoFull population
  • Rellenado basado en el seguimiento de cambiosPopulation based on change tracking
  • Rellenado incremental basado en una marca de tiempoIncremental population based on a timestamp.

Para obtener más información, vea Populate Full-Text Indexes (Rellenar índices de texto completo).For more info, see Populate Full-Text Indexes.

Ver las propiedades de un índice de texto completoView the properties of a full-text index

Ver las propiedades de un índice de texto completo con Transact-SQLView the properties of a full-text index with Transact-SQL

Catálogo o vista de administración dinámicaCatalog or Dynamic Management View DescripciónDescription
sys.fulltext_index_catalog_usages (Transact-SQL)sys.fulltext_index_catalog_usages (Transact-SQL) Devuelve una fila por cada referencia de catálogo de texto completo a índice de texto completo.Returns a row for each full-text catalog to full-text index reference.
sys.fulltext_index_columns (Transact-SQL)sys.fulltext_index_columns (Transact-SQL) Contiene una fila para cada columna que forma parte de un índice de texto completo.Contains a row for each column that is part of a full-text index.
sys.fulltext_index_fragments (Transact-SQL)sys.fulltext_index_fragments (Transact-SQL) Un índice de texto completo utiliza tablas internas denominadas fragmentos de índice de texto completo para almacenar los datos de índice invertidos.A fulltext index uses internal tables called full-text index fragments to store the inverted index data. Esta vista se puede utilizar para consultar los metadatos sobre estos fragmentos.This view can be used to query the metadata about these fragments. Esta vista contiene una fila para cada fragmento de índice de texto completo en cada tabla que contiene un índice de texto completo.This view contains a row for each full-text index fragment in every table that contains a full-text index.
sys.fulltext_indexes (Transact-SQL)sys.fulltext_indexes (Transact-SQL) Contiene una fila por índice de texto completo de un objeto tabular.Contains a row per full-text index of a tabular object.
sys.dm_fts_index_keywords (Transact-SQL)sys.dm_fts_index_keywords (Transact-SQL) Devuelve información sobre el contenido de un índice de texto completo para la tabla especificada.Returns information about the content of a full-text index for the specified table.
sys.dm_fts_index_keywords_by_document (Transact-SQL)sys.dm_fts_index_keywords_by_document (Transact-SQL) Devuelve información sobre el contenido de nivel de documento de un índice de texto completo para la tabla especificada.Returns information about the document-level content of a full-text index for the specified table. Una palabra clave determinada puede aparecer en varios documentos.A given keyword can appear in several documents.
sys.dm_fts_index_population (Transact-SQL)sys.dm_fts_index_population (Transact-SQL) Devuelve información acerca de los rellenados de índices de texto completo actualmente en progreso.Returns information about the full-text index populations currently in progress.

Ver las propiedades de un índice de texto completo con Management StudioView the properties of a full-text index with Management Studio

  1. En el Explorador de objetos de Management Studio, expanda el servidor.In Management Studio, in Object Explorer, expand the server.

  2. Expanda Bases de datos y, después, la base de datos que contiene el índice de texto completo.Expand Databases, and then expand the database that contains the full-text index.

  3. Expanda Tablas.Expand Tables.

  4. Haga clic con el botón derecho en la tabla en la que esté definido el índice de texto completo, seleccione Índice de texto completo y, en el menú contextual Índice de texto completo , haga clic en Propiedades.Right-click the table on which the full-text index is defined, select Full-Text index, and on the Full-Text index context menu, click Properties. De esta forma se abre el cuadro de diálogo Propiedades del índice de texto completo .This opens the Full-text index Properties dialog box.

  5. En el panel Seleccionar una página , puede seleccionar cualquiera de las páginas siguientes:In the Select a page pane, you can select any of the following pages:

    PáginaPage DescripciónDescription
    GeneralGeneral Muestra las propiedades básicas de un índice de texto completo.Displays basic properties of the full-text index. Entre estas propiedades se incluyen varias propiedades modificables y varias propiedades invariables, como el nombre de base de datos, el nombre de tabla y el nombre de columna de clave de texto completo.These include several modifiable properties and a number of unchangeable properties such as database name, table name, and the name of full-text key column. Las propiedades modificables son:The modifiable properties are:

    Lista de palabras irrelevantes de índice de texto completoFull-Text Index Stoplist

    Indexación de texto completo habilitadaFull-Text Indexing Enabled

    Seguimiento de cambiosChange Tracking

    Lista de propiedades de búsquedaSearch Property List
    ColumnasColumns Muestra las columnas de tabla que están disponibles para la indización de texto completo.Displays the table columns that are available for full-text indexing. La columna o columnas seleccionadas son de índices de texto completo.The selected column or columns are full-text indexed. Puede seleccionar tantas columnas disponibles como desee incluir en el índice de texto completo.You can select as many of the available columns as you want to include in the full-text index. Para obtener más información, vea Populate Full-Text Indexes (Rellenar índices de texto completo).For more info, see Populate Full-Text Indexes.
    ProgramacionesSchedules Utilice esta página para crear o administrar programaciones para un trabajo del Agente SQL Server que inicie un rellenado de tabla incremental para los rellenados del índice de texto completo.Use this page to create or manage schedules for a SQL Server Agent job that starts an incremental table population for the full-text index populations. Para obtener más información, vea Populate Full-Text Indexes (Rellenar índices de texto completo).For more info, see Populate Full-Text Indexes.

    Nota: Después de salir del cuadro de diálogo Propiedades del índice de texto completo, cualquier programación que se cree se asocia a un trabajo del Agente SQL Server (Iniciar rellenado incremental de tablas en database_name.table_name).Note: After you exit the Full-Text Index Properties dialog box, any newly created schedule is associated with a SQL Server Agent job (Start Incremental Table Population on database_name.table_name).
  6. Haga clic en OK.Click OK. para guardar cualquier cambio y salir del cuadro de diálogo Propiedades del índice de texto completo.to save any changes and exit the Full-text index Properties dialog box.

Ver las propiedades de tablas y columnas indexadasView the properties of indexed tables and columns

Varias de las funciones de Transact-SQLTransact-SQL, como OBJECTPROPERTYEX, se pueden usar para obtener el valor de diversas propiedades de indización de texto completo.Several Transact-SQLTransact-SQL functions such as OBJECTPROPERTYEX can be used to obtain the value of various full-text indexing properties. Esta información es útil para administrar y solucionar problemas de la búsqueda de texto completo.This information is useful for administering and troubleshooting full-text search.

En la siguiente tabla se enumeran las propiedades de texto completo relacionadas con las tablas y columnas indexadas y sus funciones de Transact-SQLTransact-SQL relacionadas.The following table lists the full-text properties related to indexed tables and columns and their related Transact-SQLTransact-SQL functions.

PropiedadProperty DescripciónDescription FunciónFunction
FullTextTypeColumnFullTextTypeColumn TYPE COLUMN de la tabla que contiene la información del tipo de documento de la columna.TYPE COLUMN in the table that holds the document type information of the column. COLUMNPROPERTYCOLUMNPROPERTY
IsFulltextIndexedIsFulltextIndexed Si una columna se ha habilitado para la indización de texto completo.Whether a column has been enabled for full-text indexing. COLUMNPROPERTYCOLUMNPROPERTY
IsFulltextKeyIsFulltextKey Si el índice es la clave de texto completo de una tabla.Whether the index is the full-text key for a table. INDEXPROPERTYINDEXPROPERTY
TableFulltextBackgroundUpdateIndexOnTableFulltextBackgroundUpdateIndexOn Si una tabla tiene actualización de índices de texto completo en segundo plano.Whether a table has full-text background update indexing. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextCatalogIdTableFulltextCatalogId Identificador del catálogo de texto completo en el que residen los datos de índice de texto completo para la tabla.Full-text catalog ID in which the full-text index data for the table resides. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextChangeTrackingOnTableFulltextChangeTrackingOn Si una tabla tiene habilitado el seguimiento de cambios de texto completo.Whether a table has full-text change-tracking enabled. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextDocsProcessedTableFulltextDocsProcessed Número de filas procesadas desde el comienzo de la indización de texto completo.Number of rows processed since the start of full-text indexing. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextFailCountTableFulltextFailCount Número de filas no indizadas por Búsqueda de texto completo.Number of rows Full-Text Search did not index. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextItemCountTableFulltextItemCount Número de filas para las que se crearon índices de texto completo correctamente.Number of rows that were successfully full-text indexed. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextKeyColumnTableFulltextKeyColumn Proporciona el identificador de la columna de clave única de texto completo.The column ID of the full-text unique key column. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFullTextMergeStatusTableFullTextMergeStatus Si una tabla que tiene un índice de texto completo se está combinando actualmente.Whether a table that has a full-text index is currently in merging. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextPendingChangesTableFulltextPendingChanges Número de entradas de seguimiento de cambios pendientes de procesamiento.Number of pending change tracking entries to process. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableFulltextPopulateStatusTableFulltextPopulateStatus Estado del rellenado de una tabla de texto completo.Population status of a full-text table. OBJECTPROPERTYEXOBJECTPROPERTYEX
TableHasActiveFulltextIndexTableHasActiveFulltextIndex Si la tabla tiene un índice de texto completo activo.Whether a table has an active full-text index. OBJECTPROPERTYEXOBJECTPROPERTYEX

Obtener información sobre la columna de clave de texto completoGet info about the full-text key column

Normalmente, el resultado de las funciones de valores de conjunto de filas CONTAINSTABLE o FREETEXTTABLE tiene que combinarse con la tabla base.Typically, the result of CONTAINSTABLE or FREETEXTTABLE rowset-valued functions need to be joined with the base table. En esos casos, necesita conocer el nombre de la columna de clave única.In such cases, you need to know the unique key column name. Puede consultar si un índice único determinado se utiliza como clave de texto completo y obtener el identificador de la columna de clave de texto completo.You can inquire whether a given unique index is used as the full-text key, and you can obtain the identifier of the full-text key column.

Determinar si un índice único determinado se utiliza como columna de clave de texto completoDetermine whether a given unique index is used as the full-text key column

Utilice una instrucción SELECT para llamar a la función INDEXPROPERTY .Use a SELECT statement to call the INDEXPROPERTY function. En la llamada a la función, use la función OBJECT_ID para convertir el nombre de la tabla (nombre_tabla) en el identificador de tabla, especifique el nombre de un índice único para la tabla y especifique la propiedad del índice IsFulltextKey como sigue:In the function call use the OBJECT_ID function to convert the name of the table (table_name) into the table ID, specify the name of a unique index for the table, and specify the IsFulltextKey index property, as follows:

SELECT INDEXPROPERTY( OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey' );  

Esta instrucción devuelve el valor 1 si el índice se usa para exigir la exclusividad de la columna de clave de texto completo; de lo contrario, se devuelve 0.This statement returns 1 if the index is used to enforce uniqueness of the full-text key column and 0 if it is not.

EjemploExample

El ejemplo siguiente consulta si el índice PK_Document_DocumentNode se usa para exigir la exclusividad de la columna de clave de texto completo como sigue:The following example inquires whether the PK_Document_DocumentNode index is used to enforce the uniqueness of the full-text key column, as follows:

USE AdventureWorks  
GO  
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey' )  

Este ejemplo devuelve 1 si el índice PK_Document_DocumentNode se utiliza para exigir la exclusividad de la columna de clave de texto completo.This example returns 1 if the PK_Document_DocumentNode index is used to enforce uniqueness of the full-text key column. De lo contrario, devuelve 0 o NULL.Otherwise, it returns 0 or NULL. NULL implica que está usando un nombre de índice no válido, el nombre de índice no corresponde a la tabla, la tabla no existe, etcétera.NULL implies you are using an invalid index name, the index name does not correspond to the table, the table does not exist, or so forth.

Buscar el identificador de la columna de clave de texto completoFind the identifier of the full-text key column

Todas las tablas habilitadas para texto completo tienen una columna que se usa para aplicar las filas únicas de la tabla (columna de clave**única).Each full-text enabled table has a column that is used to enforce unique rows for the table (the unique**key column). La propiedad TableFulltextKeyColumn obtenida mediante la función OBJECTPROPERTY proporciona la identidad de esta columna de clave única.The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTYEX function, contains the column ID of the unique key column.

Para obtener este identificador, puede utilizar una instrucción SELECT con el fin de llamar a la función OBJECTPROPERTYEX.To obtain this identifier, you can use a SELECT statement to call the OBJECTPROPERTYEX function. Use la función OBJECT_ID para convertir el nombre de la tabla (nombre_tabla) en el identificador de tabla y especificar la propiedad TableFulltextKeyColumn como sigue:Use the OBJECT_ID function to convert the name of the table (table_name) into the table ID and specify the TableFulltextKeyColumn property, as follows:

SELECT OBJECTPROPERTYEX(OBJECT_ID( 'table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';  

EjemplosExamples

En el ejemplo siguiente se devuelve el identificador de la columna de clave de texto completo o NULL.The following example returns the identifier of the full-text key column or NULL. NULL implica que está usando un nombre de índice no válido, el nombre de índice no corresponde a la tabla, la tabla no existe, etcétera.NULL implies that you are using an invalid index name, the index name does not correspond to the table, the table does not exist, or so forth.

USE AdventureWorks;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');  
GO  

En el ejemplo siguiente se muestra cómo usar el identificador de la columna de clave única para obtener el nombre de la columna.The following example shows how to use the identifier of the unique key column to obtain the name of the column.

USE AdventureWorks;  
GO  
DECLARE @key_column sysname  
SET @key_column = Col_Name(Object_Id('Production.Document'),  
ObjectProperty(Object_id('Production.Document'),  
'TableFulltextKeyColumn')   
)  
SELECT @key_column AS 'Unique Key Column';  
GO  

Este ejemplo devuelve una columna de conjunto de resultados denominada Unique Key Column, que muestra una única fila que contiene el nombre de la columna de clave única de la tabla Document, DocumentNode.This example returns a result set column named Unique Key Column, which displays a single row containing the name of the unique key column of the Document table, DocumentNode. Tenga en cuenta que, si esta consulta contuviera un nombre de índice no válido, el nombre del índice no correspondiera a la tabla, la tabla no existiera, etc., devolvería NULL.Note that if this query contained an invalid index name, the index name did not correspond to the table, the table did not exist, and so forth, it would return NULL.

Indexar columnas varbinary(max) y xmlIndex varbinary(max) and xml columns

Si una columna varbinary(max) , varbinary o xml está indexada con texto completo, se puede consultar con los predicados de texto completo (CONTAINS y FREETEXT) y las funciones (CONTAINSTABLE y FREETEXTTABLE), igual que cualquier otra columna indexada de texto completo.If a varbinary(max), varbinary, or xml column is full-text indexed, it can be queried using the full-text predicates (CONTAINS and FREETEXT) and functions (CONTAINSTABLE and FREETEXTTABLE), like any other full-text indexed column.

Indexar datos varbinary(máximo) o varbinaryIndex varbinary(max) or varbinary data

Una sola columna varbinary(max) o varbinary puede almacenar muchos tipos de documentos.A single varbinary(max) or varbinary column can store many types of documents. SQL ServerSQL Server admite cualquier tipo de documento para el que tenga un filtro instalado que esté disponible en el sistema operativo.supports any document type for which a filter is installed and available in the operative system. La extensión de archivo del documento identifica el tipo de cada documento.The document type of each document is identified by the file extension of the document. Por ejemplo, para la extensión de archivo .doc, la búsqueda de texto completo utiliza el filtro que admite los documentos de Microsoft Word.For example, for a .doc file extension, full-text search uses the filter that supports Microsoft Word documents. Para obtener una lista de los tipos de documentos disponibles, consulte la vista de catálogo sys.fulltext_document_types .For a list of available document types, query the sys.fulltext_document_types catalog view.

Observe que el motor de búsqueda de texto completo puede aprovechar los filtros existentes que se instalan en el sistema operativo.Note that the Full-Text Engine can leverage existing filters that are installed in the operating system. Para poder utilizar los separadores de palabras, los lematizadores y los filtros del sistema operativo, debe cargarlos en la instancia del servidor, como sigue:Before you can use operating-system filters, word breakers, and stemmers, you must load them in the server instance, as follows:

EXEC sp_fulltext_service @action='load_os_resources', @value=1  

Para crear un índice de texto completo en una columna varbinary(max) , el motor de búsqueda de texto completo necesita tener acceso a las extensiones de archivo de los documentos en la columna varbinary(max) .To create a full-text index on a varbinary(max) column, the Full-Text Engine needs access to the file extensions of the documents in the varbinary(max) column. Esta información debe almacenarse en una columna de la tabla, denominada columna de tipo, que debe estar asociada a la columna varbinary(max) en el índice de texto completo.This information must be stored in a table column, called a type column, that must be associated with the varbinary(max) column in the full-text index. Al indizar un documento, el motor de búsqueda de texto completo usa la extensión de archivo de la columna de tipo para identificar qué filtro usar.When indexing a document, the Full-Text Engine uses the file extension in the type column to identify which filter to use.

Indexar Datos xmlIndex xml data

Una columna del tipo de datos xml solo almacena los documentos y fragmentos XML, y solo se usa el filtro XML para los documentos.An xml data type column stores only XML documents and fragments, and only the XML filter is used for the documents. Por consiguiente, una columna de tipo es innecesaria.Therefore, a type column is unnecessary. En las columnas xml , el índice de texto completo indexa el contenido de los elementos XML, pero omite el formato XML.On xml columns, the full-text index indexes the content of the XML elements, but ignores the XML markup. Los valores de los atributos se incluyen en el índice de texto completo a menos que sean valores numéricos.Attribute values are full-text indexed unless they are numeric values. Las etiquetas de elemento se usan como límites de token.Element tags are used as token boundaries. Se admiten fragmentos y documentos con formato XML o HTML correcto que contengan varios idiomas.Well-formed XML or HTML documents and fragments containing multiple languages are supported.

Para obtener más información sobre cómo indexar y consultar en una columna xml, vea Usar la búsqueda de texto completo con columnas XML.For more info about indexing and querying on an xml column, see Use Full-Text Search with XML Columns.

Deshabilitación o rehabilitación de la indización de texto completo para una tablaDisable or re-enable full-text indexing for a table

En SQL ServerSQL Server, todas las bases de datos creadas por el usuario están habilitadas para texto completo de forma predeterminada.In SQL ServerSQL Server, all user-created databases are full-text enabled by default. Además, una tabla individual se habilitará automáticamente para la indización de texto completo en cuanto se cree un índice de texto completo en la misma y se agregue una columna al índice.Additionally, an individual table is automatically enabled for full-text indexing as soon as a full-text index is created on it and a column is added to the index. Una tabla se deshabilitará automáticamente para la indización de texto completo cuando se quite la última columna de su índice de texto completo.A table is automatically disabled for full-text indexing when the last column is dropped from its full-text index.

En una tabla que tiene un índice de texto completo, se puede deshabilitar o volver a habilitar manualmente una tabla para la indización de texto completo utilizando SQL Server Management StudioSQL Server Management Studio.On a table that has a full-text index, you can manually disable or re-enable a table for full-text indexing using SQL Server Management StudioSQL Server Management Studio.

  1. Expanda el grupo de servidores, expanda Bases de datos y luego expanda la base de datos que contenga la tabla que quiera habilitar para la indexación de texto completo.Expand the server group, expand Databases, and expand the database that contains the table you want to enable for full-text indexing.

  2. Expanda Tablas y haga clic con el botón derecho en la tabla que quiere deshabilitar o volver a habilitar para la indexación de texto completo.Expand Tables, and right-click the table that you want to disable or re-enable for full-text indexing.

  3. Seleccione Índice de texto completo y luego haga clic en Deshabilitar índice de texto completo o en Habilitar índice de texto completo.Select Full-Text index, and then click Disable Full-Text index or Enable Full-Text index.

Quitar un índice de texto completo de una tablaRemove a full-text index from a table

  1. En el Explorador de objetos, haga clic con el botón secundario en la tabla que contiene el índice de texto completo que desea eliminar.In Object Explorer, right-click the table that has the full-text index that you want to delete.

  2. Seleccione Eliminar índice de texto completo.Select Delete Full-Text index.

  3. Cuando se le pida, haga clic en Aceptar para confirmar que quiere eliminar el índice de texto completo.When prompted, click OK to confirm that you want to delete the full-text index.