CREATE FULLTEXT INDEX (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Crea un índice de texto en una o varias columnas de una tabla o vista indizada de una base de datos. Sólo se permite un índice de texto por cada tabla o vista indizada. De forma predeterminada, al crear una base de datos, ésta se habilita para la búsqueda de texto.

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

Sintaxis

CREATE FULLTEXT INDEX ON table_name
     [(column_name [TYPE COLUMN type_column_name] 
          [LANGUAGE language_term] [,...n])]
     KEY INDEX index_name
          [ON fulltext_catalog_name]
     [WITH 
          {CHANGE_TRACKING {MANUAL | AUTO | OFF [, 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.
  • column_name
    Es el nombre de la columna o columnas incluidas en el índice de texto. Sólo las columnas de tipo char, varchar, nchar, nvarchar, text, ntext, image, xml y varbinary se pueden indizar para la búsqueda de texto.
  • TYPE COLUMN type_column_name
    Es el nombre de la columna de table_name que contiene el tipo de documento de column_name.

    type_column_name debe ser de tipo char, nchar, varchar o nvarchar. Especifique type_column_name sólo si la columna o las columnas de column_name son del tipo varbinary(max) o image; de lo contrario, SQL Server devuelve un error.

    Para obtener más información, vea Filtros de búsqueda de texto.

  • 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 utiliza para indizar los datos almacenados en las columnas de tipo char, nchar, varchar, nvarchar, text y ntext. Éste es el idioma predeterminado que se utiliza en el momento de la consulta si language_term no se especifica como parte de un predicado de texto en relación con la columna. Si no se especifica ningún valor, se utiliza el idioma predeterminado de la instancia de SQL Server.

    Si se desconoce el idioma o se van a almacenar varios idiomas en column_name (y la columna no es del tipo de datos BLOB o XML), utilice el idioma neutro (0x0). Para obtener más información, vea Consideraciones internacionales para la búsqueda de texto.

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

    Si el valor especificado es una cadena, language_term corresponde al valor de columna alias de la tabla del sistema syslanguages. La cadena debe estar delimitada con comillas sencillas 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 tener más de 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 a menos que language_term se especifique como parte de una consulta de texto.

  • ,... n
    Indica que se pueden especificar varias columnas para convertirlas en índice de texto. Si se especifican varias columnas, separe cada columna con una coma.
  • KEY INDEX index_name
    Es el nombre del índice de clave única de table_name. KEY INDEX debe ser una columna que no admita valores NULL con una sola clave única. Seleccione el índice de clave única más pequeño para la clave única de texto. Para aumentar el rendimiento, se recomienda un índice CLUSTERED.
  • ON fulltext_catalog_name
    Se trata del catálogo de texto utilizado para el índice de texto. El catálogo debe existir en la base de datos. Esta cláusula es opcional. Si no se especifica, se utiliza un catálogo predeterminado. Si no hay ningún catálogo predeterminado, SQL Server devuelve un error.

    El grupo de archivos de fulltext_catalog_name o, si no se especifica ningún catálogo, el catálogo de texto predeterminado no debe ser READONLY ni OFFLINE. En caso contrario, SQL Server devuelve un error.

  • WITH CHANGE_TRACKING {MANUAL | AUTO | OFF [ **,**NO POPULATION]}
    Especifica si SQL Server mantiene o no una lista de todos los cambios de los datos indizados. Los cambios en los datos mediante WRITETEXT y UPDATETEXT no se recopilan con el seguimiento de cambios.

    • MANUAL
      Especifica que el registro de seguimiento de cambios se propaga en una programación con el Agente SQL Server o manualmente por el usuario.
    • AUTO
      Especifica que SQL Server actualiza automáticamente el índice de texto conforme los datos se modifican en las tablas asociadas. AUTO es el valor predeterminado.

      Nota   Aunque los cambios se pueden propagar automáticamente, es posible que no se reflejen de inmediato en el índice de texto. Para obtener más información sobre las propiedades utilizadas para la supervisión del proceso de indización de texto y sobre el diagnóstico de problemas en la indización de texto, vea Obtener valores de propiedades de texto mediante funciones Transact-SQL.

    • OFF [ , NO POPULATION]
      Especifica que SQL Server no mantiene una lista de los cambios realizados en los datos indizados.

      La opción NO POPULATION se puede utilizar sólo si CHANGE_TRACKING es OFF. Si se especifica NO POPULATION, SQL Server no llena el índice tras su creación. El índice sólo se llena después de que el usuario ejecute el comando ALTER FULLTEXT INDEX con la cláusula START FULL o INCREMENTAL POPULATION. Si no se especifica NO POPULATION, SQL Server llena el índice por completo tras su creación.

Permisos

El usuario debe tener el permiso REFERENCES en el catálogo de texto y el permiso ALTER en la tabla o vista, o ser un miembro de la función fija de servidor sysadmin o de las funciones fijas de base de datos db_owner o db_ddladmin.

Ejemplos

En el ejemplo siguiente se crea un catálogo de texto en la tabla HumanResources.JobCandidate.

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;
GO

Vea también

Referencia

ALTER FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
GRANT (Transact-SQL)

Otros recursos

Búsqueda de texto

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se ha aclarado que los índices de texto también pueden aplicarse en vistas indizadas.
  • Se agregó un vínculo al tema acerca de los filtros para aclarar la cláusula TYPE COLUMN.