ALTER FULLTEXT INDEX (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cambia las propiedades de un índice de texto completo en SQL Server.

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 ]
   }
[ ; ]

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

table_name

Es el nombre de la tabla o vista indexada 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á 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 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.

  • MANUAL

    Especifica que los cambios sometidos a seguimiento se propagarán manualmente llamando a la instrucción ALTER FULLTEXT INDEX …  START UPDATE POPULATION de Transact-instrucción 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 básica (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.

  • Apagado

    Especifica que SQL Server no mantiene una lista de cambios en los datos indexados.

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.

Use 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 más información, vea Interacciones del seguimiento de cambios y del parámetro NO POPULATION.

TYPE COLUMN type_column_name

Especifica el nombre de una columna de tabla, type_column_name, que se usa para almacenar el tipo de documento 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 de tipo char, nchar, varcharo 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 usa 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 usar 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

Se trata del lenguaje de los datos almacenados en column_name.

language_term es opcional y puede especificarse como un valor hexadecimal, un entero o una cadena 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 usa 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 lenguaje de texto completo predeterminado de la instancia de SQL Server.

Si se especifica como una cadena, language_term corresponde al alias valor de columna alias de la tabla del sistema sys.syslanguages. La cadena debe estar delimitada con comillas sencillas, como en 'language_term'. Cuando se especifica como un entero, language_term es el LCID real que identifica el idioma. Cuando 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 de juego de caracteres de doble byte (DBCS), 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 lenguaje 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 del lenguaje del documento se utilizará en el momento de la indexación. Por ejemplo, en las columnas XML, el atributo xml:lang de los documentos XML identifica el lenguaje. En el momento de la consulta, el valor especificado previamente en language_term se convierte en el idioma predeterminado que se usa para las consultas de texto completo, a menos que language_term se especifique como parte de una consulta de texto completo.

STATISTICAL_SEMANTICS

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.

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.

{ADD | DROP } STATISTICAL_SEMANTICS

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.

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 empiece el rellenado del índice de texto completo de language_term. 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 indexado.

  • 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 marca de tiempo, se lleva a cabo un rellenado FULL en 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. El rellenado de Change Tracking debe estar habilitado 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.

  • Apagado

    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 ]

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.

Cambia la lista de propiedades de búsqueda asociada al índice, si hay alguna.

  • Apagado

    Especifica que no se asocie al índice de texto completo ninguna lista de propiedades. Al desconectar la lista de propiedades de búsqueda de un índice de texto completo (ALTER FULLTEXT INDEX ... SET SEARCH PROPERTY LIST OFF), la búsqueda de propiedades en la tabla básica ya no es posible.

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

Importante

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 más información, vea Cambiar la lista de propiedades de búsqueda provoca un rellenado del índice.

Nota:

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

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

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

Comentarios

En las columnas xml, puede crear un índice de texto completo que indique 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 usan 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 Usar la búsqueda de texto completo con columnas XML.

Recomendamos que la columna de clave de índice sea de un tipo de datos entero. Esto proporciona optimizaciones en el momento de ejecución de la consulta.

ALTER FULLTEXT INDEX no se puede colocar dentro de una transacción de usuario. Esta instrucción debe ejecutarse en su propia transacción implícita.

Para más información sobre índices de texto completo, vea Crear y administrar índices de texto completo.

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 habilitado Sin especificar Se realiza un rellenado completo en el índice.
No habilitado Specified No se produce el rellenado del índice hasta que se emite una instrucción ALTER FULLTEXT INDEX...START POPULATION.
habilitado Specified Se produce un error y no se altera el índice.
Habilitado Sin especificar Se realiza un rellenado completo en el índice.

Para más información sobre rellenar índices de texto completo, vea Rellenar índices de texto completo.

Cambiar la lista de propiedades de búsqueda provoca una recompliación 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).

  • Desconectar 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 más información sobre el funcionamiento de la búsqueda de texto completo con listas de propiedades de búsqueda, vea Buscar propiedades de documento con listas de propiedades de búsqueda. Para más información sobre 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: desconectar la lista de propiedades de búsqueda lista y después asociar el índice con cualquier 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, 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 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.

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

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

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.

En este ejemplo se asocia la lista de propiedades DocumentPropertyList al índice de texto completo en la tabla Production.Document. 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 ver un ejemplo que crea la lista de propiedades DocumentPropertyList, vea CREATE SEARCH PROPERTY LIST (Transact-SQL).

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

C. Quitar una lista de propiedades de búsqueda

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.

En el siguiente ejemplo, se quita la lista de propiedades DocumentPropertyList del índice de texto completo en la tabla Production.Document. 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 AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO

D. Iniciar un rellenado completo

En este ejemplo se inicia un rellenado completo del índice de texto completo en la tabla JobCandidate.

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

Consulte también