Share via


ALTER FULLTEXT INDEX (Transact-SQL)

Cambia las propiedades de un índice de texto completo.

Icono de vínculo a temas Convenciones 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 ]
     [ STATISTICAL_SEMANTICS ]
 [,...n] )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ 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 ] 
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_name }
     [ WITH NO POPULATION ] 
   }
[;]

Argumentos

  • table_name
    Es el nombre de la tabla o vista indizada que contiene la columna o 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á 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 el índice de texto completo. 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 "Comentarios", 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 "Comentarios" 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 un flujo binario, 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 Configurar y administrar filtros para búsquedas.

  • 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.

    Use 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.

    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 las consultas de texto completo, a menos que language_term se especifique como parte de una consulta de texto completo.

  • STATISTICAL_SEMANTICS
    Crea los índices adicionales de similitud de documentos y frases clave que forman parte de la indización semántica estadística. Para obtener más información, vea Búsqueda semántica (SQL Server).

  • [ ,...n]
    Indica que se pueden especificar varias columnas para las cláusulas ADD, ALTER 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 "Comentarios", más adelante en este tema.

  • {ADD | DROP } STATISTICAL_SEMANTICS
    Habilita o deshabilita la indización semántica estadística de las columnas especificadas. Para obtener más información, vea Búsqueda semántica (SQL Server).

  • 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 Configurar y administrar palabras irrelevantes y listas de palabras irrelevantes para la búsqueda de texto completo.

  • SET SEARCH PROPERTY LIST { OFF | property_list_name } [ WITH NO POPULATION ]
    Cambia la lista de propiedades de búsqueda asociada al índice, si hay alguna.

    • OFF
      Especifica que no se asocie al índice de texto completo ninguna lista de propiedades. Cuando se desactiva la lista de propiedades de búsqueda de un índice de texto completo (ALTER FULLTEXT INDEX … SET SEARCH PROPERTY LIST OFF), ya no es posible buscar propiedades en la tabla base.

      De forma predeterminada, cuando se desactiva una lista de propiedades de búsqueda existente, el índice de texto completo se vuelve a rellenar automáticamente. Si se especifica WITH NO POPULATION al desactivar la lista de propiedades de búsqueda, este rellenado automático no sucede. Sin embargo, se recomienda ejecutar, si procede, un rellenado completo del índice de texto completo para mayor comodidad. Al rellenar el índice de texto completo, se eliminan los metadatos específicos de cada propiedad de búsqueda que se haya quitado, con lo que el índice de texto completo resultará más pequeño y eficaz.

    • property_list_name
      Especifica el nombre de la lista de propiedades de búsqueda que se va a asociar al índice de texto completo.

      Para agregar una lista de propiedades de búsqueda a un índice de texto completo es preciso rellenar el índice, a fin de indizar las propiedades de búsqueda que se han registrado para la lista de propiedades de búsqueda asociada. Si se especifica WITH NO POPULATION al agregar la lista de propiedades de búsqueda, se deberá ejecutar un rellenado del índice en un momento adecuado.

      Nota importanteImportante

      Si el índice de texto completo estaba asociado previamente a una lista de propiedades de búsqueda diferente, habrá que volver a generar la lista de propiedades para que el índice tenga un estado coherente. El índice se trunca inmediatamente y está vacío hasta que se ejecuta el rellenado completo. Para obtener más información acerca de cuándo las modificaciones realizadas en la lista de propiedades de búsqueda causan una nueva generación, vea "Comentarios", más adelante en este tema.

      [!NOTA]

      Puede asociar una lista de propiedades de búsqueda con más de un índice de texto completo en la misma base de datos.

      Para encontrar las listas de propiedades de búsqueda en la base de datos actual

      Para obtener más información acerca de las listas de propiedades de búsqueda, vea Buscar propiedades de documento con listas de propiedades de búsqueda.

Comentarios

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

Cambiar la lista de propiedades de búsqueda provoca un rellenado del índice

La primera vez que el índice de texto completo se asocia con una lista de propiedades de búsqueda, el índice debe volver a llenarse para incluir los términos de búsqueda específicos de la propiedad. Los datos del índice existente no se truncan.

Sin embargo, si se asocia el índice de texto completo con otra lista de propiedades, se vuelve a generar el índice. Una generación inmediata trunca el índice de texto completo y quita todos los datos existentes, de tal forma que el índice se debe volver a llenar. A medida que avanza el rellenado, las consultas de texto completo de la tabla base buscan únicamente en las filas de la tabla que ya se han indizado al efectuar el rellenado. Los datos del índice rellenado incluirán metadatos de las propiedades registradas en la lista de propiedades agregada recientemente.

Los escenarios que provocan una nueva generación son:

  • Cambiar directamente a otra lista de propiedades de búsqueda (vea "Escenario A", más adelante en esta sección).

  • Desactivar la lista de propiedades de lista y asociar después el índice con cualquier lista de propiedades de búsqueda (vea "Escenario B", más adelante en esta sección).

[!NOTA]

Para obtener más información acerca de cómo funciona la búsqueda de texto completo con las listas de propiedades de búsqueda, vea Buscar propiedades de documento con listas de propiedades de búsqueda. Para obtener información acerca de los rellenados completos, vea Rellenar índices de texto completo.

Escenario A: cambiar directamente a otra lista de propiedades de búsqueda

  1. Se crea un índice de texto completo en table_1 con una lista de propiedades de búsqueda spl_1:

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1, 
       CHANGE_TRACKING OFF, NO POPULATION; 
    
  2. Se ejecuta un rellenado completo del índice de texto completo:

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. Después, el índice de texto completo se asocia a otra lista de propiedades de búsqueda, spl_2, mediante la siguiente instrucción:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Esta instrucción produce un rellenado completo, el comportamiento predeterminado. Sin embargo, antes de empezar este rellenado, el motor de texto completo automáticamente trunca el índice.

Escenario B: desactivar la lista de propiedades de búsqueda lista y después asociar el índice con cualquier lista de propiedades de búsqueda

  1. Un índice de texto completo se crea en table_1 con una lista de propiedades de búsqueda spl_1, seguido de un rellenado completo automático (comportamiento predeterminado):

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1; 
    
  2. La lista de propiedades de búsqueda se desactiva, como sigue:

    ALTER FULLTEXT INDEX ON table_1 
       SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
    
  3. El índice de texto completo se asocia de nuevo a la misma lista de propiedades de búsqueda o a otra distinta.

    Por ejemplo, la siguiente instrucción vuelve a asociar el índice de texto completo con la lista de propiedades de búsqueda original, spl_1:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Esta instrucción inicia un rellenado completo, el comportamiento predeterminado.

    [!NOTA]

    También se debería realizar la regeneración para otra lista de propiedades de búsqueda, como spl_2.

Permisos

El usuario debe tener el permiso ALTER en la tabla o vista indizada, o ser un miembro del rol fijo de servidor sysadmin o de los roles fijos de 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. Si se especifica SET SEARCH PROPERTY LIST, el usuario debe tener el permiso REFERENCES para la lista de propiedades de búsqueda. El propietario de la lista de palabras irrelevantes o de la lista de propiedades de búsqueda especificadas puede conceder el permiso REFERENCES, si el propietario tiene permisos ALTER FULLTEXT CATALOG.

[!NOTA]

Los usuarios tienen el permiso REFERENCES 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 AdventureWorks.

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

B.Asociar una lista de propiedades con un índice de texto completo

En el siguiente ejemplo se asocia la lista de propiedades DocumentPropertyList al índice de texto completo en la tabla Production.Document de la base de datos AdventureWorks. Esta instrucción ALTER FULLTEXT INDEX inicia un rellenado completo, que es el comportamiento predeterminado de la cláusula SET SEARCH PROPERTY LIST.

[!NOTA]

Para obtener un ejemplo que crea la lista de propiedades DocumentPropertyList, vea CREATE SEARCH PROPERTY LIST (Transact-SQL).

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST DocumentPropertyList; 
GO

C.Quitar una lista de propiedades de búsqueda

En el siguiente ejemplo, se quita la lista de propiedades DocumentPropertyList del índice de texto completo en la tabla Production.Document de la base de datos AdventureWorks. En este ejemplo, no hay prisa para quitar las propiedades del índice, de modo que se especifica la opción WITH NO POPULATION. Sin embargo, la búsqueda en el nivel de propiedades ya no se permite mediante este índice de texto completo.

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
GO

D.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 AdventureWorks.

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

Vea también

Referencia

sys.fulltext_indexes (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

DROP FULLTEXT INDEX (Transact-SQL)

Conceptos

Búsqueda de texto completo (SQL Server)

Rellenar índices de texto completo