Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
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).
Tipos de población
Un índice de texto completo admite los siguientes tipos de población:
- Completa población
- Relleno automático o manual mediante el seguimiento de cambios
- Población incremental basada en una marca de tiempo
Población completa
Durante un rellenado total, se crean entradas de índice para todas las filas de una tabla o vista indexada. Una población completa de un índice de texto completo genera entradas de índice para todas las filas de la tabla base o de la vista indexada.
De forma predeterminada, SQL Server rellena totalmente un nuevo índice de texto completo en cuanto se crea.
- Por un lado, una población completa puede consumir una cantidad significativa de recursos. Por consiguiente, al crear un índice de texto completo durante los períodos de máxima actividad, suele ser aconsejable retrasar el rellenado total hasta un período de menor actividad, especialmente si la tabla base del índice de texto completo es grande.
- 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.
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. 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.
Ejemplo - Crear un índice de texto completo sin ejecutar una población completa
En el ejemplo siguiente se crea un índice de texto completo en la tabla Production.Document de la base de datos de ejemplo AdventureWorks . Este ejemplo utiliza WITH CHANGE_TRACKING OFF, NO POPULATION para retrasar la carga completa inicial.
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: Ejecutar una población completa en una tabla
En el siguiente ejemplo se realiza una población completa en la tabla Production.Document de la base de datos de ejemplo AdventureWorks.
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
Cumplimentación basada en el seguimiento de cambios
Opcionalmente, puede usar el seguimiento de cambios para mantener un índice de texto completo después de su población completa inicial. El seguimiento de cambios provoca una pequeña sobrecarga de trabajo porque SQL Server mantiene una tabla en la que realiza el seguimiento de los cambios de la tabla base desde el último rellenado. Cuando se utiliza el seguimiento de cambios, SQL 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. 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.
Nota:
Para las tablas que contienen una columna timestamp, puede usar el rellenado incremental en lugar del de seguimiento de cambios.
Cuando el seguimiento de cambios está habilitado durante la creación de índices, SQL Server rellena totalmente el nuevo índice de texto completo justo después de crearse. Después de esto, los cambios se siguen y propagan al índice de texto completo.
Habilitar seguimiento de cambios
Hay dos tipos de seguimiento de cambios:
- Automático (opción
CHANGE_TRACKING AUTO). El seguimiento de cambios automático es el comportamiento predeterminado. - Manual (opción
CHANGE_TRACKING MANUAL).
El tipo de seguimiento de cambios determina cómo se rellena el índice de texto completo, de la forma siguiente:
Rellenado automático
De forma predeterminada, o si especifica
CHANGE_TRACKING AUTO, el motor de texto completo usa la población automática para el índice de texto completo. 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. 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.Para iniciar el seguimiento de los cambios con relleno automático
CREATE FULLTEXT INDEX ... WITH CHANGE_TRACKING AUTO
ALTER FULLTEXT INDEX ... SET CHANGE_TRACKING AUTO
Ejemplo: Modificación de un índice de texto completo para utilizar el seguimiento de cambios automático
El siguiente ejemplo cambia el índice de texto completo de la tablaHumanResources.JobCandidatede la base de datos de ejemploAdventureWorkspara usar el seguimiento de cambios con población automática.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO; GORelleno manual
Si especifica CHANGE_TRACKING MANUAL, el Motor de texto completo utiliza población manual para el índice de texto completo. 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. Sin embargo, no se propagan al índice de texto completo hasta que se ejecuta una instrucción ALTER FULLTEXT INDEX ... START UPDATE POPULATION. Puede utilizar el Agente SQL Server para llamar a esta instrucción de Transact-SQL de forma periódica.
Para iniciar el seguimiento de cambios con cumplimentación manual
CREATE FULLTEXT INDEX ... CON SEGUIMIENTO DE CAMBIOS MANUAL
ALTER FULLTEXT INDEX ... SET MANUAL DE SEGUIMIENTO DE CAMBIOS
Ejemplo: Creación de un índice de texto completo con seguimiento de cambios manual
En el ejemplo siguiente se crea un índice de texto completo que utilizará el seguimiento de cambios con rellenado manual en la tablaHumanResources.JobCandidatede la base de datos de ejemploAdventureWorks.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; GOEjemplo: ejecutar una población manual
En el ejemplo siguiente se ejecuta una población manual en el índice de texto completo con seguimiento de cambios de la tablaHumanResources.JobCandidatede la base de datos de ejemploAdventureWorks.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION; GO
Deshabilitación del seguimiento de cambios
CREATE FULLTEXT INDEX ... CON CHANGE_TRACKING DESACTIVADO
ALTER FULLTEXT INDEX ... SET CHANGE_TRACKING DESACTIVADO
Población incremental basada en una marca de tiempo
Un relleno incremental es un mecanismo alternativo para rellenar manualmente el índice de texto completo. Si una tabla experimenta un volumen alto de inserciones, la población incremental puede ser más eficaz que la población manual.
Puede ejecutar un llenado incremental de un índice de texto completo que tenga CHANGE_TRACKING configurado en MANUAL o en OFF.
Para realizar un llenado incremental, es necesario que la tabla indizada tenga una columna del tipo de datos timestamp . Si no existe una columna de tipo timestamp , no puede llevarse a cabo un llenado incremental.
SQL Server usa la columna timestamp para identificar las filas que han cambiado desde el último rellenado. La población incremental actualiza el índice de texto completo con las filas agregadas, eliminadas o modificadas después de la última población, o mientras esta última población estaba en curso. Al final de un proceso de llenado, el motor de texto completo registra un nuevo valor de timestamp. Este valor es el valor de timestamp mayor que el recopilador de SQL ha encontrado. Este valor se usará cuando se inicie la próxima carga incremental.
En algunos casos, la solicitud de una población incremental da lugar a una población completa.
- Si se solicita un rellenado incremental en una tabla sin una columna de tipo timestamp , se llevará a cabo un rellenado completo.
- 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.
- Si algún metadato que afecte al índice de texto completo de la tabla ha cambiado desde la última población, las solicitudes de población incremental se llevan a cabo como poblaciones completas. Esto incluye los cambios en los metadatos ocasionados al alterar la definición de una columna, índice o índice de texto completo.
Ejecutar una carga incremental
Para ejecutar un relleno incremental, ejecute una instrucción ALTER FULLTEXT INDEX con la cláusula START INCREMENTAL POPULATION.
Crear o cambiar una programación para la población incremental
En el Explorador de objetos de Management Studio, expanda el servidor.
Expanda Bases de datos y, después, expanda la base de datos que contiene el índice de texto completo.
Amplíe Tablas.
Haga clic con el botón derecho en la tabla en la que esté definido el índice de texto completo, seleccione Índice de texto completoy, en el menú contextual Índice de texto completo , haga clic en Propiedades. De esta forma se abre el cuadro de diálogo Propiedades del índice de texto completo .
Importante
Si la tabla base o la vista no contienen ninguna columna del tipo de datos timestamp, no se puede realizar un rellenado incremental.
En el panel Seleccionar una página, seleccione Programaciones.
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.
Las opciones son las siguientes:
Para crear una nueva programación, haga clic en Nuevo.
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. Para guardar la programación, haga clic en Aceptar.
Importante
Un trabajo del Agente de SQL Server (Iniciar el relleno incremental de tabla en nombre_base_de_datos.nombre_tabla) queda asociado a una nueva programación después de salir del cuadro de diálogo Propiedades del índice de texto completo. Si crea varias programaciones para un mismo índice de texto completo, todas utilizan la misma tarea.
Para cambiar una programación existente, seleccione la programación existente y haga clic en Editar.
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.
Nota:
Para obtener información sobre cómo modificar un trabajo del Agente SQL Server, vea Modificar un trabajo.
Para eliminar una programación existente, seleccione la programación existente y haga clic en Eliminar.
Seleccione Aceptar.
Solucionar problemas de una población de texto completo (rastreo)
Cuando se produce un error durante el rastreo, la función de registro del rastreo de Búsqueda de texto completo crea y mantiene un registro del rastreo, que es un archivo de texto sin formato. Cada registro de rastreo se corresponde con un determinado catálogo de texto completo. 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.
El archivo de registro de rastreo sigue el siguiente esquema de nomenclatura:
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
Las partes variables del nombre de archivo de registro de rastreo son las siguientes.
- < DatabaseID>: identificador de una base de datos. < dbid>: es un número de cinco dígitos con ceros a la izquierda.
- < FullTextCatalogID>: identificador de catálogo de texto completo. < catid>: es un número de cinco dígitos con ceros a la izquierda.
- < n>: es un entero que indica que existen uno o varios registros de rastreo del mismo catálogo de texto completo.
Por ejemplo, SQLFT0000500008.2 es el archivo de registro de rastreo de una base de datos con identificador de base de datos = 5 y con identificador de catálogo de texto completo = 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.
Consulte también
sys.dm_fts_index_population (Transact-SQL)
Introducción a la búsqueda de texto completo
Crear y administrar índices de texto completo
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)