Rellenar índices de texto completoPopulate 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

La creación y el mantenimiento de un índice de texto completo implica el rellenado del índice mediante un proceso denominado rellenado (también se denomina rastreo).Creating and maintaining a full-text index involves populating the index by using a process called a population (also known as a crawl).

Types of populationTypes of population

Un índice de texto completo admite los siguientes tipos de rellenado:A full-text index supports the following types of population:

  • Rellenado completoFull population
  • Rellenado automático o manual basado en el seguimiento de cambiosAutomatic or manual population based on change tracking
  • Rellenado incremental basado en una marca de tiempoIncremental population based on a timestamp

Rellenado completoFull population

Durante un rellenado completo, se crean entradas de índice para todas las filas de una tabla o vista indizada.During a full population, index entries are built for all the rows of a table or indexed view. Un rellenado completo de un índice de texto completo genera entradas de índice para todas las filas de la tabla base o vista indizada.A full population of a full-text index, builds index entries for all the rows of the base table or indexed view.

De forma predeterminada, SQL ServerSQL Server rellena totalmente un nuevo índice de texto completo en cuanto se crea.By default, SQL ServerSQL Server populates a new full-text index fully as soon as it is created.

  • Por otro lado, un rellenado completo puede consumir una cantidad significativa de recursos.On the one hand, a full population can consume a significant amount of resources. Por consiguiente, al crear un índice de texto completo durante los períodos de máxima actividad, suele ser aconsejable retrasar el rellenado completo hasta un momento de menor uso, particularmente si la tabla base de un índice de texto completo es grande.Therefore, when creating a full-text index during peak periods, it is often a best practice to delay the full population until an off-peak time, particularly if the base table of an full-text index is large.
  • Además, el catálogo de texto completo al que pertenece el índice no se puede usar hasta que se rellenan todos sus índices de texto completo.On the other hand, the full-text catalog to which the index belongs is not usable until all of its full-text indexes are populated.

Para crear un índice de texto completo sin rellenarlo inmediatamente, especifique la cláusula CHANGE_TRACKING OFF, NO POPULATION en la instrucción CREATE FULLTEXT INDEX.To create a full-text index without populating it immediately, specify the CHANGE_TRACKING OFF, NO POPULATION clause in the CREATE FULLTEXT INDEX statement. Si especifica CHANGE_TRACKING MANUAL, el motor de texto completo no rellena el nuevo índice de texto completo hasta que se ejecute una instrucción ALTER FULLTEXT INDEX mediante la cláusula START FULL POPULATION o START INCREMENTAL POPULATION.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine doesn't populate the new full-text index until you execute an ALTER FULLTEXT INDEX statement using the START FULL POPULATION or START INCREMENTAL POPULATION clause.

Ejemplo: Creación de un índice de texto completo sin ejecutar un rellenado completoExample - Create a full-text index without running a full population

En el ejemplo siguiente se crea un índice de texto completo en la tabla Production.Document de la base de datos de ejemplo AdventureWorks .The following example creates a full-text index on the Production.Document table of the AdventureWorks sample database. Este ejemplo utiliza WITH CHANGE_TRACKING OFF, NO POPULATION para retrasar el rellenado completo inicial.This example uses WITH CHANGE_TRACKING OFF, NO POPULATION to delay the initial full population.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

Ejemplo: Ejecución de un rellenado completo en una tablaExample - Run a full population on a table

En el ejemplo siguiente se ejecuta un rellenado completo en la tabla Production.Document de la base de datos de ejemplo AdventureWorks .The following example runs a full population on the Production.Document table of the AdventureWorks sample database.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Rellenado basado en el seguimiento de cambiosPopulation based on change tracking

Si se desea, se puede usar el seguimiento de cambios para mantener un índice de texto completo después de su rellenado completo inicial.Optionally, you can use change tracking to maintain a full-text index after its initial full population. El seguimiento de cambios provoca una pequeña sobrecarga de trabajo porque SQL ServerSQL Server mantiene una tabla en la que realiza el seguimiento de los cambios de la tabla base desde el último rellenado.There is a small overhead associated with change tracking because SQL ServerSQL Server maintains a table in which it tracks changes to the base table since the last population. Cuando se utiliza el seguimiento de cambios, SQL ServerSQL Server mantiene un registro de las filas de la tabla base o la vista indexada que se han modificado con las actualizaciones, eliminaciones o inserciones.When you use change tracking, SQL ServerSQL Server maintains a record of the rows in the base table or indexed view that have been modified by updates, deletes, or inserts. Los cambios realizados en los datos con WRITETEXT y UPDATETEXT no se reflejan en el índice de texto completo y no se recopilan con el seguimiento de cambios.Data changes made through WRITETEXT and UPDATETEXT are not reflected in the full-text index, and are not picked up with change tracking.

Nota

Para las tablas que contienen una columna timestamp, puede usar el rellenado incremental en lugar del de seguimiento de cambios.For tables containing a timestamp column, you can use incremental population instead of change tracking.

Cuando el seguimiento de cambios está habilitado durante la creación de índices, SQL ServerSQL Server rellena totalmente el nuevo índice de texto completo justo después de crearse.When you enable change tracking during index creation, SQL ServerSQL Server fully populates the new full-text index immediately after it is created. Después de esto, los cambios se siguen y propagan al índice de texto completo.Thereafter, changes are tracked and propagated to the full-text index.

Enable change trackingEnable change tracking

Hay dos tipos de seguimiento de cambios:There are two types of change tracking:

  • Automático (opción CHANGE_TRACKING AUTO).Automatic (CHANGE_TRACKING AUTO option). El seguimiento de cambios automático es el comportamiento predeterminado.Automatic change tracking is the default behavior.
  • Manual (opción CHANGE_TRACKING MANUAL).Manual (CHANGE_TRACKING MANUAL option).

El tipo de seguimiento de cambios determina cómo se rellena el índice de texto completo, de la forma siguiente:The type of change tracking determines how the full-text index is populated, as follows:

  • Rellenado automáticoAutomatic population

    De forma predeterminada, o si especifica CHANGE_TRACKING AUTO, el motor de búsqueda de texto completo utiliza el rellenado automático en el índice de texto completo.By default, or if you specify CHANGE_TRACKING AUTO, the Full-Text Engine uses automatic population on the full-text index. Una vez completado el rellenado total inicial, se realiza el seguimiento de los cambios cuando los datos se modifican en la tabla base y los cambios sometidos a seguimiento se propagan de forma automática.After the initial full population completes, changes are tracked as data is modified in the base table, and the tracked changes are propagated automatically. Sin embargo, el índice de texto completo se actualiza en segundo plano, de modo que los cambios propagados podrían no reflejarse inmediatamente en el índice.The full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.

    Para iniciar el seguimiento de los cambios con rellenado automáticoTo start tracking changes with automatic population

    Ejemplo: Modificación de un índice de texto completo para utilizar el seguimiento de cambios automáticoExample - Alter a full-text index to use automatic change tracking
    En el ejemplo siguiente se cambia el índice de texto completo de la tabla HumanResources.JobCandidate de la base de datos de ejemplo AdventureWorks para usar el seguimiento de cambios con rellenado automático.The following example changes the full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database to use change tracking with automatic population.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • Rellenado manualManual population

    Si especifica CHANGE_TRACKING MANUAL, el motor de búsqueda de texto completo utiliza el rellenado manual en el índice de texto completo.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine uses manual population on the full-text index. Una vez completado el rellenado total inicial, se realiza el seguimiento de los cambios a medida que los datos se modifiquen en la tabla base.After the initial full population completes, changes are tracked as data is modified in the base table. Pero no se propagan al índice de texto completo hasta que se ejecuta una instrucción ALTER FULLTEXT INDEX ... START UPDATE POPULATION .However, they are not propagated to the full-text index until you execute an ALTER FULLTEXT INDEX ... START UPDATE POPULATION statement. Puede utilizar el Agente SQL ServerSQL Server para llamar a esta instrucción de Transact-SQLTransact-SQL de forma periódica.You can use SQL ServerSQL Server Agent to call this Transact-SQLTransact-SQL statement periodically.

    Para iniciar el seguimiento de cambios con rellenado manualTo start tracking changes with manual population

    Ejemplo: Creación de un índice de texto completo con seguimiento de cambios manualExample - Create a full-text index with manual change tracking
    En el ejemplo siguiente se crea un índice de texto completo que utilizará el seguimiento de cambios con rellenado manual en la tabla HumanResources.JobCandidate de la base de datos de ejemplo AdventureWorks .The following example creates a full-text index that will use change tracking with manual population on the HumanResources.JobCandidate table of the AdventureWorks sample database.

    USE AdventureWorks;  
    GO  
    CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);  
    CREATE FULLTEXT CATALOG ft AS DEFAULT;  
    CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)   
       KEY INDEX ui_ukJobCand   
       WITH CHANGE_TRACKING=MANUAL;  
    GO  
    

    Ejemplo: Ejecución de un rellenado manualExample - Run a manual population
    En el ejemplo siguiente se ejecuta un rellenado manual en el índice de texto completo sometido a seguimiento de la tabla HumanResources.JobCandidate de la base de datos de ejemplo AdventureWorks .The following example runs a manual population on the change-tracked full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

Deshabilitación del seguimiento de cambiosDisable change tracking

Rellenado incremental basado en una marca de tiempoIncremental population based on a timestamp

Un rellenado incremental es un mecanismo alternativo para rellenar un índice de texto completo manualmente.An incremental population is an alternative mechanism for manually populating a full-text index. Si una tabla experimenta un volumen alto de inserciones, el rellenado incremental puede ser más eficaz que el rellenado manual.If a table experiences a high volume of inserts, using incremental population can be more efficient that using manual population.

Puede ejecutar un llenado incremental de un índice de texto completo que tenga CHANGE_TRACKING configurado en MANUAL o en OFF.You can run an incremental population for a full-text index that has CHANGE_TRACKING set to MANUAL or OFF.

Para realizar un llenado incremental, es necesario que la tabla indizada tenga una columna del tipo de datos timestamp .The requirement for incremental population is that the indexed table must have a column of the timestamp data type. Si no existe una columna de tipo timestamp , no puede llevarse a cabo un llenado incremental.If a timestamp column does not exist, incremental population cannot be performed.

SQL ServerSQL Server usa la columna timestamp para identificar las filas que han cambiado desde el último rellenado.uses the timestamp column to identify rows that have changed since the last population. El rellenado incremental actualiza entonces el índice de texto completo de las filas que se hayan agregado, eliminado o modificado desde el último rellenado o en el curso del último rellenado.The incremental population then updates the full-text index for rows added, deleted, or modified after the last population, or while the last population was in progress. Al final de un proceso de rellenado, el motor de texto completo registra un nuevo valor de tipo timestamp .At the end of a population, the Full-Text Engine records a new timestamp value. Este valor es el valor de timestamp mayor que el recopilador de SQL ha encontrado.This value is the largest timestamp value that SQL Gatherer has found. Se usará cuando se inicie un rellenado incremental posterior.This value will be used when the next incremental population starts.

En algunos casos, la solicitud de un rellenado incremental produce un llenado completo.In some cases, the request for an incremental population results in a full population.

  • Si se solicita un rellenado incremental en una tabla sin una columna de tipo timestamp , se llevará a cabo un rellenado completo.A request for incremental population on a table without a timestamp column results in a full population operation.
  • Si el primer llenado de un índice de texto completo es un llenado incremental, indiza todas las filas, lo que lo hace equivalente a un llenado completo.If the first population on a full-text index is an incremental population, it indexes all rows, making it equivalent to a full population.
  • Si alguno de los metadatos que afectan al índice de texto completo de la tabla ha cambiado desde el último rellenado, las solicitudes de rellenado incremental se implementan como rellenados completos.If any metadata that affects the full-text index for the table has changed since the last population, incremental population requests are implemented as full populations. Esto incluye los cambios en los metadatos ocasionados al alterar la definición de una columna, índice o índice de texto completo.This includes metadata changes caused by altering any column, index, or full-text index definitions.

Ejecución de un rellenado incrementalRun an incremental population

Para ejecutar un rellenado incremental, ejecute una instrucción ALTER FULLTEXT INDEX mediante la cláusula START INCREMENTAL POPULATION.To run an incremental population, execute an ALTER FULLTEXT INDEX statement using the START INCREMENTAL POPULATION clause.

Creación o modificación de una programación para el rellenado incrementalCreate or change a schedule for incremental population

  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.

    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.

    Importante

    Si la tabla base o la vista no contienen ninguna columna del tipo de datos timestamp, no se puede realizar un rellenado incremental.If the base table or view does not contain a column of the timestamp data type, incremental population is not possible.

  4. En el panel Seleccionar una página, seleccione Programaciones.In the Select a page pane, select Schedules.

    Utilice esta página para crear o administrar las programaciones para un trabajo del Agente SQL Server que inicia un rellenado de tabla incremental en la tabla base o vista indizada 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 on the base table or indexed view of the full-text index.

    Las opciones son las siguientes:The options are as follows:

    • Para crear una nueva programación, haga clic en Nuevo.To create a new schedule, click New.

      De esta forma se abre el cuadro de diálogo Nueva programación de tabla de indexación de texto completo , donde puede crear una programación.This opens the New Full-Text Indexing Table Schedule dialog box, where you can create a schedule. Para guardar la programación, haga clic en Aceptar.To save the schedule, click OK.

      Importante

      Un trabajo del Agente SQL Server (Iniciar rellenado de tabla incremental en nombre_base_de_datos.nombre_tabla) se asocia a una nueva programación después de salir del cuadro de diálogo Propiedades del índice de texto completo .A SQL Server Agent job (Start Incremental Table Population on database_name.table_name) is associated with a new schedule after you exit the Full-Text Index Properties dialog box. Si crea varias programaciones para el mismo índice de texto completo, todas utilizan el mismo trabajo.If you create multiple schedules for the same full-text index, they all use the same job.

    • Para cambiar una programación existente, seleccione la programación existente y haga clic en Editar.To change an existing schedule, select the existing schedule and click Edit.

      De esta forma se abre el cuadro de diálogo Nueva programación de tabla de indexación de texto completo , donde puede modificar una programación.This opens the New Full-Text Indexing Table Schedule dialog box, where you can modify the schedule.

      Nota

      Para obtener información sobre cómo modificar un trabajo del Agente SQL Server, vea Modificar un trabajo.For information about modifying a SQL Server Agent job, see Modify a Job.

    • Para eliminar una programación existente, seleccione la programación existente y haga clic en Eliminar.To remove an existing schedule, select the existing schedule and click Delete.

  5. Haga clic en OK.Click OK.

Solución de errores en un rellenado de texto completo (rastreo)Troubleshoot errors in a full-text population (crawl)

Cuando se produce un error durante un rastreo, la función de registro de rastreo de la búsqueda de texto completo crea y mantiene un registro de rastreo, que es un archivo sin formato.When an error occurs during a crawl, the Full-Text Search crawl logging facility creates and maintains a crawl log, which is a plain text file. Cada registro de rastreo se corresponde con un determinado catálogo de texto completo.Each crawl log corresponds to a particular full-text catalog. De forma predeterminada, los registros de rastreo de una instancia determinada (en este ejemplo, la instancia predeterminada) se encuentran en la carpeta %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.By default, crawl logs for a given instance (in this example, the default instance) are located in %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG folder.

El archivo de registro de rastreo sigue el siguiente esquema de nomenclatura:The crawl log file follows the following naming scheme:

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

Las partes variables del nombre de archivo de registro de rastreo son las siguientes.The variable parts of the crawl log file name are the following.

  • <DatabaseID> - El identificador de una base de datos.<DatabaseID> - The ID of a database. <dbid> es un número de cinco dígitos con ceros a la izquierda.<dbid> is a five digit number with leading zeros.
  • <FullTextCatalogID> - Identificador de catálogo de texto completo.<FullTextCatalogID> - Full-text catalog ID. <catid> es un número de cinco dígitos con ceros a la izquierda.<catid> is a five digit number with leading zeros.
  • <n> - Es un entero que indica la existencia de uno o varios registros de rastreo del mismo catálogo de texto completo.<n> - Is an integer that indicates one or more crawl logs of the same full-text catalog exist.

Por ejemplo, SQLFT0000500008.2 es el archivo de registro de rastreo para un identificador de base de datos = 5 y un identificador de catálogo de texto completo = 8.For example, SQLFT0000500008.2 is the crawl log file for a database with database ID = 5, and full-text catalog ID = 8. El 2 al final del nombre de archivo indica que existen dos archivos de registro de rastreo para esta pareja de base de datos y catálogo.The 2 at the end of the file name indicates that there are two crawl log files for this database/catalog pair.

Consulte tambiénSee Also

sys.dm_fts_index_population (Transact-SQL) sys.dm_fts_index_population (Transact-SQL)
Introducción a la búsqueda de texto completo Get Started with Full-Text Search
Crear y administrar índices de texto completo Create and Manage Full-Text Indexes
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)ALTER FULLTEXT INDEX (Transact-SQL)