Creación y administración de índices de texto completo

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En este artículo se describe cómo crear, rellenar y administrar índices de texto completo en SQL Server.

Crear un catálogo de texto completo

Antes de poder crear un índice de texto completo, necesita tener un catálogo de texto completo. El catálogo es un contenedor virtual de uno o más índices de texto completo. Para obtener más información, vea Create and Manage Full-Text Catalogs (Crear y administrar catálogos de texto completo).

Crear, modificar o quitar un índice de texto completo

Rellenar un índice de texto completo

El proceso para crear y mantener un índice de texto completo se denomina rellenado (o rastreo). Hay tres tipos de rellenado de índice de texto completo:

  • Rellenado completo
  • Rellenado basado en el seguimiento de cambios
  • Rellenado incremental basado en una marca de tiempo

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

Ver las propiedades de un índice de texto completo

Ver las propiedades de un índice de texto completo con Transact-SQL

Catálogo o vista de administración dinámica Descripción
sys.fulltext_index_catalog_usages (Transact-SQL) Devuelve una fila por cada referencia de catálogo de texto completo a índice de texto completo.
sys.fulltext_index_columns (Transact-SQL) Contiene una fila para cada columna que forma parte de un índice de texto completo.
sys.fulltext_index_fragments (Transact-SQL) Un índice de texto completo utiliza tablas internas denominadas fragmentos de índice de texto completo para almacenar los datos de índice invertidos. Esta vista se puede utilizar para consultar los metadatos sobre estos fragmentos. Esta vista contiene una fila para cada fragmento de índice de texto completo en cada tabla que contiene un índice de texto completo.
sys.fulltext_indexes (Transact-SQL) Contiene una fila por índice de texto completo de un objeto tabular.
sys.dm_fts_index_keywords (Transact-SQL) Devuelve información sobre el contenido de un índice de texto completo para la tabla especificada.
sys.dm_fts_index_keywords_by_document (Transact-SQL) Devuelve información sobre el contenido de nivel de documento de un índice de texto completo para la tabla especificada. Una palabra clave determinada puede aparecer en varios documentos.
sys.dm_fts_index_population (Transact-SQL) Devuelve información acerca de los rellenados de índices de texto completo actualmente en progreso.

Ver las propiedades de un índice de texto completo con SQL Server Management Studio

Nota:

Para ver las propiedades de los índices de texto completo para las bases de datos de Azure SQL, use Transact-SQL.

  1. En SQL Server Management Studio, en Explorador de objetos, expanda el servidor.

  2. Expanda Bases de datosy, después, la base de datos que contiene el índice de texto completo.

  3. Expanda Tablas.

  4. Haga clic con el botón derecho en la tabla en la que se define el índice de texto completo, seleccione Índice de texto completo y, en el menú contextual Índice de texto completo , seleccione Propiedades. De esta forma se abre el cuadro de diálogo Propiedades del índice de texto completo .

  5. En el panel Seleccionar una página , puede seleccionar cualquiera de las páginas siguientes:

    Página Descripción
    General Muestra las propiedades básicas de un índice de texto completo. Entre ellas se incluyen varias propiedades modificables y muchas propiedades inmutables, como el nombre de la base de datos, el nombre de la tabla y el nombre de la columna de clave de texto completo. Las propiedades modificables son:

    Lista de palabras irrelevantes de índice de texto completo

    Indexación de texto completo habilitada

    Seguimiento de cambios

    Lista de propiedades de búsqueda
    Columnas Muestra las columnas de tabla que están disponibles para la indización de texto completo. La columna o columnas seleccionadas son de índices de texto completo. Puede seleccionar tantas columnas disponibles como desee incluir en el índice de texto completo. Para obtener más información, vea Populate Full-Text Indexes (Rellenar índices de texto completo).
    Programaciones Utilice esta página para crear o administrar programaciones para un trabajo del Agente SQL Server que inicie un rellenado de tabla incremental para los rellenados del índice de texto completo. Para obtener más información, vea Populate Full-Text Indexes (Rellenar índices de texto completo).

    Nota: Después de salir del cuadro de diálogo Propiedades del índice de texto completo , cualquier programación que se cree se asociará a un trabajo del Agente SQL Server (Iniciar rellenado incremental de tablas en nombre_basededatos.nombre_tabla).
  6. Seleccione Aceptar para guardar los cambios y salir del cuadro de diálogo Propiedades del índice de texto completo.

Ver las propiedades de tablas y columnas indexadas

Se pueden usar varias funciones de Transact-SQL, como OBJECTPROPERTYEX, para obtener el valor de varias propiedades de indexación de texto completo. Esta información es útil para administrar y solucionar problemas de la búsqueda de texto completo.

En la tabla siguiente se enumeran las propiedades de texto completo relacionadas con las tablas y columnas indexadas y sus funciones de Transact-SQL relacionadas.

Propiedad Descripción Function
FullTextTypeColumn TYPE COLUMN de la tabla que contiene la información del tipo de documento de la columna. COLUMNPROPERTY
IsFulltextIndexed Si una columna se ha habilitado para la indización de texto completo. COLUMNPROPERTY
IsFulltextKey Si el índice es la clave de texto completo de una tabla. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Si una tabla tiene actualización de índices de texto completo en segundo plano. OBJECTPROPERTYEX
TableFulltextCatalogId Identificador del catálogo de texto completo en el que residen los datos de índice de texto completo para la tabla. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Si una tabla tiene habilitado el seguimiento de cambios de texto completo. OBJECTPROPERTYEX
TableFulltextDocsProcessed Número de filas procesadas desde el comienzo de la indización de texto completo. OBJECTPROPERTYEX
TableFulltextFailCount Número de filas de búsqueda de texto completo que no se indizaron. OBJECTPROPERTYEX
TableFulltextItemCount Número de filas para las que se crearon índices de texto completo correctamente. OBJECTPROPERTYEX
TableFulltextKeyColumn Proporciona el identificador de la columna de clave única de texto completo. OBJECTPROPERTYEX
TableFullTextMergeStatus Si una tabla que tiene un índice de texto completo se está combinando actualmente. OBJECTPROPERTYEX
TableFulltextPendingChanges Número de entradas de seguimiento de cambios pendientes de procesamiento. OBJECTPROPERTYEX
TableFulltextPopulateStatus Estado del rellenado de una tabla de texto completo. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Si la tabla tiene un índice de texto completo activo. OBJECTPROPERTYEX

Obtención de información sobre la columna de clave de texto completo

Normalmente, el resultado de las funciones de valores de conjunto de filas CONTAINSTABLE o FREETEXTTABLE tiene que combinarse con la tabla base. En esos casos, necesita conocer el nombre de la columna de clave única. Puede consultar si un índice único determinado se utiliza como clave de texto completo y obtener el identificador de la columna de clave de texto completo.

Determinar si un índice único determinado se utiliza como columna de clave de texto completo

Utilice una instrucción SELECT para llamar a la función INDEXPROPERTY . En la llamada de función, use la función OBJECT_ID para convertir el nombre de la tabla (table_name) en el identificador de tabla, especifique el nombre de un índice único para la tabla y especifique la propiedad de índice IsFulltextKey, como se indica a continuación:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey');

Esta instrucción devuelve 1 si el índice se usa para aplicar la unicidad de la columna de clave de texto completo y 0 si no lo es.

Ejemplo

El ejemplo siguiente consulta si el índice PK_Document_DocumentNode se usa para exigir la exclusividad de la columna de clave de texto completo como sigue:

USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey');

Este ejemplo devuelve 1 si el índice PK_Document_DocumentNode se utiliza para exigir la exclusividad de la columna de clave de texto completo. De lo contrario, devuelve 0 o NULL. NULL implica que está usando un nombre de índice no válido, el nombre del índice no se corresponde con la tabla, la tabla no existe o así sucesivamente.

Buscar el identificador de la columna de clave de texto completo

Cada tabla habilitada para texto completo tiene una columna que se usa para aplicar filas únicas para la tabla (la columna de clave única). La propiedad TableFulltextKeyColumn obtenida mediante la función OBJECTPROPERTY proporciona la identidad de esta columna de clave única.

Para obtener este identificador, puede utilizar una instrucción SELECT con el fin de llamar a la función OBJECTPROPERTYEX. Use la función OBJECT_ID para convertir el nombre de la tabla (nombre_tabla) en el identificador de tabla y especificar la propiedad TableFulltextKeyColumn como sigue:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';

Ejemplos

En el ejemplo siguiente se devuelve el identificador de la columna de clave de texto completo o NULL. NULL implica que está usando un nombre de índice no válido, el nombre del índice no se corresponde con la tabla, la tabla no existe o así sucesivamente.

USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

En el ejemplo siguiente se muestra cómo usar el identificador de la columna de clave única para obtener el nombre de la columna.

USE AdventureWorks2022;
GO

DECLARE @key_column SYSNAME

SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
   OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));

SELECT @key_column AS 'Unique Key Column';
GO

Este ejemplo devuelve una columna de conjunto de resultados denominada Unique Key Column, que muestra una única fila que contiene el nombre de la columna de clave única de la tabla Document, DocumentNode. Si esta consulta contenía un nombre de índice no válido, el nombre del índice no correspondía a la tabla, la tabla no existía, etc., devolvería NULL.

Indexar columnas varbinary(max) y XML

Si una columna varbinary(max), varbinaryo xml está indexada con texto completo, se puede consultar con los predicados de texto completo (CONTAINS y FREETEXT) y las funciones (CONTAINSTABLE y FREETEXTTABLE), igual que cualquier otra columna indexada de texto completo.

Indexar datos varbinary(máximo) o varbinary

Una sola columna varbinary(max) o varbinary puede almacenar muchos tipos de documentos. SQL Server admite cualquier tipo de documento para el que tenga un filtro instalado que esté disponible en el sistema operativo. La extensión de archivo del documento identifica el tipo de cada documento. Por ejemplo, para la extensión de archivo .doc, la búsqueda de texto completo utiliza el filtro que admite los documentos de Microsoft Word. Para obtener una lista de los tipos de documentos disponibles, consulte la vista de catálogo sys.fulltext_document_types .

El motor de texto completo puede usar filtros existentes instalados en el sistema operativo. Para poder utilizar los separadores de palabras, los lematizadores y los filtros del sistema operativo, debe cargarlos en la instancia del servidor, como sigue:

EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;

Para crear un índice de texto completo en una columna varbinary(max) , el motor de búsqueda de texto completo necesita tener acceso a las extensiones de archivo de los documentos en la columna varbinary(max) . Esta información debe almacenarse en una columna de la tabla, denominada columna de tipo, que debe estar asociada a la columna varbinary(max) en el índice de texto completo. Al indizar un documento, el motor de búsqueda de texto completo usa la extensión de archivo de la columna de tipo para identificar qué filtro usar.

Indexar datos XML

Una columna del tipo de datos xml solo almacena los documentos y fragmentos XML, y solo se usa el filtro XML para los documentos. Por consiguiente, una columna de tipo es innecesaria. En las columnas xml , el índice de texto completo indexa el contenido de los elementos XML, pero omite el formato 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 sobre cómo indexar y consultar en una columna xml, vea Usar la búsqueda de texto completo con columnas XML.

Deshabilitación o rehabilitación de la indización de texto completo para una tabla

En SQL Server, todas las bases de datos creadas por el usuario están habilitadas para texto completo de forma predeterminada. Además, una tabla individual se habilitará automáticamente para la indización de texto completo en cuanto se cree un índice de texto completo en la misma y se agregue una columna al índice. Una tabla se deshabilitará automáticamente para la indización de texto completo cuando se quite la última columna de su índice de texto completo.

En una tabla que tiene un índice de texto completo, se puede deshabilitar o volver a habilitar manualmente una tabla para la indización de texto completo utilizando SQL Server Management Studio.

  1. Expanda el grupo de servidores, expanda Bases de datosy luego expanda la base de datos que contenga la tabla que quiera habilitar para la indexación de texto completo.

  2. Expanda Tablasy haga clic con el botón derecho en la tabla que quiere deshabilitar o volver a habilitar para la indexación de texto completo.

  3. Seleccione Índice de texto completo y, a continuación, Deshabilitar índice de texto completo o Habilitar índice de texto completo.

Quitar un índice de texto completo de una tabla

  1. En el Explorador de objetos, haga clic con el botón secundario en la tabla que contiene el índice de texto completo que desea eliminar.

  2. Seleccione Eliminar índice de texto completo.

  3. Cuando se le solicite, seleccione Aceptar para confirmar que desea eliminar el índice de texto completo.

Pasos siguientes