ALTER FULLTEXT INDEX (Transact-SQL)

Cambia las propiedades de un índice de texto completo.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

ALTER FULLTEXT INDEX ON table_name
   { ENABLE 
   | DISABLE
   | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
   | ADD ( column_name 
     [ TYPE COLUMN type_column_name ] 
     [ LANGUAGE language_term ] [,...n] )
     [ WITH NO POPULATION ]
   | DROP ( column_name [,...n] )
     [ WITH NO POPULATION ] 
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | {STOP | PAUSE | RESUME } POPULATION 
   | SET STOPLIST { OFF| SYSTEM | stoplist_name }
     [ WITH NO POPULATION ] 
   }
[;]

Argumentos

  • table_name
    Es el nombre de la tabla o vista indizada que contiene las columnas incluidas en el índice de texto completo. Especificar los nombres de la base de datos y del propietario de la tabla es opcional.

  • ENABLE | DISABLE
    Indica a SQL Server si debe recopilar datos de índice de texto completo para table_name. ENABLE activa el índice de texto completo; DISABLE lo desactiva. La tabla no admitirá las consultas de texto completo mientras esté deshabilitado el índice.

    La deshabilitación de un índice de texto completo permite desactivar el seguimiento de cambios y mantener el índice de texto completo, que puede reactivar en cualquier momento con ENABLE. Cuando se deshabilita el índice de texto completo, los metadatos del índice de texto completo permanecen en las tablas del sistema. Si CHANGE_TRACKING está habilitado (actualización automática o manual) cuando se deshabilita el índice de texto completo, el estado del índice se inmoviliza, los rastreos en curso se detienen y no se mantiene un seguimiento de los nuevos cambios en los datos de la tabla ni se propagan los cambios al índice.

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    Especifica si SQL Server propagará al índice de texto completo los cambios (actualizaciones, eliminaciones o inserciones) efectuados en las columnas de la tabla que cubre dicho índice. 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 obtener información sobre la interacción del seguimiento de cambios y WITH NO POPULATION, vea "Notas", posteriormente en este tema.

  • MANUAL
    Especifica que las marcas de revisión se propagarán manualmente llamando a la instrucción ALTER FULLTEXT INDEX … START UPDATE POPULATION de Transact-SQL (rellenado manual). Puede utilizar el Agente SQL Server para llamar a esta instrucción de Transact-SQL de forma periódica.

  • AUTO
    Especifica que los cambios sometidos a seguimiento se propagarán automáticamente cuando los datos se modifiquen en la tabla base (rellenado automático). Aunque los cambios se propagan de forma automática, podrían no reflejarse de inmediato en el índice de texto completo. AUTO es el valor predeterminado.

  • OFF
    Especifica que SQL Server no mantendrá una lista de cambios en los datos indizados.

  • ADD | DROP column_name
    Especifica las columnas que se agregarán o eliminarán de un índice de texto completo. La columna o columnas deben ser de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary o varbinary(max).

    Utilice la cláusula DROP solamente en columnas que se hayan habilitado previamente para la indización de texto completo.

    Utilice TYPE COLUMN y LANGUAGE con la cláusula ADD para establecer estas propiedades en column_name. Cuando se agrega una columna, el índice de texto completo de la tabla se debe rellenar de nuevo para que funcionen las consultas de texto completo en esta columna.

    Nota

    Que se rellene el índice de texto completo una vez agregada o quitada una columna en un índice de texto completo depende de si está habilitado el seguimiento de cambios y de si se especifica WITH NO POPULATION. Para obtener más información, vea la sección "Notas" más adelante en este tema.

  • TYPE COLUMN type_column_name
    Especifica el nombre de una columna de la tabla, type_column_name, que se utiliza para retener el tipo para un documento varbinary, varbinary(max) o image. Esta columna, denominada columna de tipo, contiene una extensión de archivo proporcionada por el usuario (.doc, .pdf, .xls, etc.). La columna de tipo debe ser char, nchar, varchar o nvarchar.

    Especifique TYPE COLUMN type_column_name únicamente si column_name especifica una columna de tipo varbinary, varbinary(max) o image, en la que los datos se almacenan como datos binarios; de lo contrario, SQL Server devuelve un error.

    Nota

    En el momento de la indización, el motor de texto completo utiliza la abreviatura de la columna de tipo de cada fila de la tabla para identificar el filtro de la búsqueda de texto completo que se va a utilizar para el documento en column_name. El filtro carga el documento como una secuencia binaria, quita la información del formato y envía el texto del documento al componente de separador de palabras. Para obtener más información, vea Filtros de búsqueda de texto completo.

  • LANGUAGE language_term
    Es el idioma de los datos almacenados en column_name.

    language_term es opcional y se puede especificar como una cadena, un entero o un valor hexadecimal correspondiente al identificador de configuración regional (LCID) de un idioma. Si se especifica language_term, el idioma que representa se aplica 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 predeterminado de la instancia de SQL Server.

    Utilice el procedimiento almacenado sp_configure para tener acceso a la información sobre el idioma de texto completo predeterminado de la instancia de SQL Server. Para obtener más información, vea default full-text language (opción).

    Si se especifica como una cadena, language_term corresponde al valor de columna alias de la tabla del sistema syslanguages. La cadena debe ir entre comillas simples, como en 'language_term'. Si el valor especificado es un entero, language_term es el LCID real que identifica el idioma. Si se especifica como un valor hexadecimal, language_term es 0x 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 DBCS (juego de caracteres de doble byte), SQL Server lo convertirá a Unicode.

    Se deben habilitar recursos, como los separadores de palabras y lematizadores, para el idioma especificado como language_term. Si estos recursos no admiten el idioma especificado, SQL Server devuelve un error.

    Para las columnas no BLOB y no XML que contienen datos de texto en varios idiomas o en los casos en que se desconoce el idioma del texto almacenado en la columna, utilice el recurso de idioma neutro (0x0). Para los documentos almacenados en columnas de tipo XML o BLOB, la codificación de idioma del documento se utilizará en el momento de la indización. Por ejemplo, en las columnas XML, el atributo xml:lang de los documentos XML identifica el idioma. En el momento de la consulta, el valor especificado previamente en language_term se convierte en el idioma predeterminado que se utiliza para consultas de texto completo a menos que language_term se especifique como parte de una consulta de texto completo.

  • [ ,...n]
    Indica que se pueden especificar varias columnas para las cláusulas ADD o DROP. Si se especifican varias columnas, sepárelas con comas.

  • WITH NO POPULATION
    Especifica que el índice de texto completo no se rellenará después de que se realice una de las operaciones de columna ADD y DROP, o una operación SET STOPLIST. El índice se rellenará solamente si el usuario ejecuta un comando START...POPULATION.

    Si se especifica NO POPULATION, SQL Server no rellena un índice. El índice se rellena únicamente cuando el usuario usa un comando ALTER FULLTEXT INDEX...START POPULATION. Cuando no se especifica NO POPULATION, SQL Server rellena el índice.

    Si CHANGE_TRACKING está habilitado y se especifica WITH NO POPULATION, SQL Server devuelve un error. Si CHANGE_TRACKING está habilitado y no se especifica WITH NO POPULATION, SQL Server realiza un rellenado completo del índice.

    Nota

    Para obtener más información acerca de la interacción del seguimiento de cambios y WITH NO POPULATION, vea "Notas", más adelante en este tema.

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    Indica a SQL Server que comience el rellenado del índice de texto completo de table_name. Si ya hay un rellenado de índice de texto completo en curso, SQL Server devuelve una advertencia y no inicia un nuevo rellenado.

    • FULL
      Especifica que se recuperarán todas las filas de la tabla para el indizado de texto completo, incluso si las filas ya se han indizado.

    • INCREMENTAL
      Especifica que solo se recuperarán para el índice de texto completo las filas modificadas desde el último rellenado. INCREMENTAL se puede aplicar únicamente si la tabla tiene una columna de tipo timestamp. Si una tabla del catálogo de texto completo no contiene una columna de tipo timestamp, se realiza un rellenado completo de la tabla.

    • UPDATE
      Especifica el procesamiento de todas las inserciones, actualizaciones o eliminaciones desde la última vez que se actualizó el índice de seguimiento de cambios. Debe estar habilitado el rellenado de seguimiento de cambios en la tabla, pero el índice de actualización en segundo plano o el seguimiento automático de cambios no se deben activar.

  • {STOP | PAUSE | RESUME } POPULATION
    Detiene o pausa cualquier operación de rellenado en curso; o bien detiene o reanuda cualquier operación de rellenado en pausa.

    STOP POPULATION no detiene el seguimiento automático de cambios ni el índice de actualización en segundo plano. Para detener el seguimiento de cambios, utilice SET CHANGE_TRACKING OFF.

    PAUSE POPULATION y RESUME POPULATION solo se pueden usar para operaciones de rellenado completas. No son relevantes para otros tipos de operación de rellenado porque las otras operaciones de rellenado reanudan los rastreos desde el punto en que se detuvieron.

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    Cambia la lista de palabras irrelevantes de texto completo asociada al índice, si hay alguna.

    • OFF
      Especifica que no se asocie al índice de texto completo ninguna lista de palabras irrelevantes.

    • SYSTEM
      Especifica que la lista de palabras irrelevantes predeterminada de texto completo del sistema se debe usar para este índice de texto completo.

    • stoplist_name
      Especifica el nombre de la lista de palabras irrelevantes que se va a asociar al índice de texto completo.

    Para obtener más información, vea Palabras irrelevantes y listas de palabras irrelevantes.

Comentarios

En las columnas xml, puede crear un índice de texto completo que indice el contenido de los elementos XML, pero omita el marcado XML. Los valores de los atributos se incluyen en el índice de texto completo a menos que sean valores numéricos. Las etiquetas de elemento se utilizan como límites de token. Se admiten fragmentos y documentos con formato XML o HTML correcto que contengan varios idiomas. Para obtener más información, vea Índice de texto completo en una columna XML.

Interacciones del seguimiento de cambios y del parámetro NO POPULATION

Que se rellene el índice de texto completo depende de si el seguimiento de cambios está habilitado y si se especifica WITH NO POPULATION en la instrucción ALTER FULLTEXT INDEX. En la tabla siguiente se resume el resultado de su interacción.

Seguimiento de cambios

WITH NO POPULATION

Resultado

No se ha habilitado

No se ha especificado

Se realiza un rellenado completo en el índice.

No se ha habilitado

Se ha especificado

No se produce el rellenado del índice hasta que se emite una instrucción ALTER FULLTEXT INDEX...START POPULATION.

Habilitado

Se ha especificado

Se produce un error y no se altera el índice.

Habilitado

No se ha especificado

Se realiza un rellenado completo en el índice.

Para obtener más información acerca del rellenado de índices de texto completo, vea Rellenado de índices de texto completo.

Permisos

El usuario debe tener el permiso ALTER en la tabla o vista indizada, o ser un miembro del rol fijo del servidor sysadmin o de los roles fijos de la base de datos db_owner o db_ddladmin.

Si se especifica SET STOPLIST, el usuario debe tener el permiso REFERENCES en la lista de palabras irrelevantes. El propietario de la lista de palabras irrelevantes puede conceder este permiso. Además, la concesión del permiso REFERENCES requiere los permisos ALTER FULLTEXT CATALOG.

Nota

Los usuarios tienen el permiso REFERENCE para la lista de palabras irrelevantes predeterminada que se incluye con SQL Server.

Ejemplos

A. Configurar el seguimiento de cambios manual

En el ejemplo siguiente se establece el seguimiento de cambios manual en el índice de texto completo en la tabla JobCandidate de la base de datos AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. Iniciar un rellenado completo

En el ejemplo siguiente se inicia un rellenado completo del índice de texto completo en la tabla JobCandidate de la base de datos AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate 
   START FULL POPULATION;
GO