Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Este artículo describe cómo crear, rellenar y gestionar índices de texto completo en el Motor de base de datos de SQL Server. Un índice de texto completo permite la búsqueda por palabras clave y lingüística en lugar de columnas basadas en caracteres en una tabla.
Crear un catálogo de texto completo
Antes de poder crear un índice de texto completo, necesitas un catálogo de texto completo. El catálogo es un contenedor virtual de uno o más índices de texto completo. Para más información, consulte Crear y gestionar catálogos Full-Text.
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 actualización (o rastreo). Hay tres tipos de rellenado de índice de texto completo:
- Población completa
- Rellenado basado en el seguimiento de cambios
- Población incremental basada 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 | Devuelve una fila por cada referencia de catálogo de texto completo a índice de texto completo. |
| sys.fulltext_index_columns | Contiene una fila para cada columna que forma parte de un índice de texto completo. |
| sys.fulltext_index_fragments | Un índice de texto completo utiliza tablas internas llamadas fragmentos de índice de texto completo para almacenar los datos del índice invertido. Puedes usar esta vista 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 | Contiene una fila por índice de texto completo de un objeto tabular. |
| sys.dm_fts_index_keywords | Devuelve información sobre el contenido de un índice de texto completo para la tabla especificada. |
| sys.dm_fts_index_keywords_by_document | 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 | Devuelve información sobre los procesos de población de índices de texto completo actualmente en curso. |
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.
En SQL Server Management Studio, en Explorador de objetos, expanda el servidor.
Expanda Bases de datos y, después, expanda la base de datos que contiene el índice de texto completo.
Amplíe Tablas.
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. Esta acción abre el cuadro de diálogo Propiedades del índice de texto completo.
En el panel Seleccionar una página , selecciona cualquiera de las siguientes páginas:
Página Descripción General Muestra las propiedades básicas de un índice de texto completo. Estas propiedades incluyen varias propiedades modificables y muchas propiedades inalterables como el nombre de la base de datos, el nombre de la tabla y el nombre de la columna 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úsquedaColumnas Muestra las columnas de tabla que están disponibles para la indización de texto completo. La columna o las columnas seleccionadas tienen un índice de texto completo. Puede seleccionar tantas columnas disponibles como desee incluir en el índice de texto completo. Para obtener más información, vea 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 Rellenar índices de texto completo.
Nota: Al salir del cuadro de diálogo Propiedades del índice de texto completo, cualquier programación recién creada se asocia a un trabajo de Agente SQL Server (Iniciar rellenado incremental de la tabla en nombre_base_datos.nombre_tabla).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
Puedes 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 | Función |
|---|---|---|
| FullTextTypeColumn |
TYPE COLUMN en la tabla que contiene la información del tipo de documento de la columna. |
COLUMNPROPERTY |
| IsFulltextIndexed | Especifica si una columna está habilitada para la indexación de texto completo. | COLUMNPROPERTY |
| IsFulltextKey | Si el índice es la clave de texto completo de una tabla. | INDEXPROPERTY |
| TableFulltextBackgroundUpdateIndexOn | Si una tabla tiene indexación de actualización de texto completo en segundo plano. | OBJECTPROPERTYEX |
| TableFulltextCatalogId | Identificador del catálogo de texto completo en el que residen los datos del índice de texto completo de 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 que la búsqueda de texto completo no indexó. | 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 | Indica si una tabla que tiene un índice de texto completo está actualmente en proceso de combinación. | OBJECTPROPERTYEX |
| TableFulltextPendingChanges | Número de entradas de seguimiento de cambios pendientes de procesamiento. | OBJECTPROPERTYEX |
| TableFulltextPopulateStatus | Estado de población de una tabla de texto completo. | OBJECTPROPERTYEX |
| TableHasActiveFulltextIndex | Si la tabla tiene un índice de texto completo activo. | OBJECTPROPERTYEX |
Obtener información sobre la columna de clave de texto completo
Normalmente, se une a la tabla base el resultado de las funciones CONTAINSTABLE o FREETEXTTABLE que devuelven conjuntos de filas. En esos casos, necesita conocer el nombre de la columna de clave única. Puedes comprobar si un índice único dado se usa como clave de texto completo, y puedes 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 a la función, utiliza la OBJECT_ID función para convertir el nombre de la tabla (table_name) al ID de la tabla, especifica el nombre de un índice único para la tabla y especifica la propiedad de índice IsFulltextKey , de la siguiente manera:
SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');
Esta instrucción devuelve 1 si el índice garantiza la unicidad de la columna clave de texto completo y 0 si no es así.
Ejemplo
El siguiente ejemplo comprueba si el PK_Document_DocumentNode índice hace cumplir la unicidad de la columna clave de texto completo:
USE AdventureWorks2025;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');
Este ejemplo devuelve 1 si el PK_Document_DocumentNode índice impone la unicidad para la columna clave de texto completo. De lo contrario, devuelve 0 o NULL.
NULL significa que estás usando un nombre de índice inválido, el nombre del índice no corresponde a la tabla, la tabla no existe, y así sucesivamente.
Buscar el identificador de la columna clave de texto completo
Cada tabla habilitada para texto completo tiene una columna que impone filas únicas para la tabla (la columna clave única ). La TableFulltextKeyColumn propiedad, obtenida de la OBJECTPROPERTYEX función, contiene el ID de columna de la columna clave única.
Para obtener este identificador, utiliza una SELECT instrucción que llame a la OBJECTPROPERTYEX función. Utiliza la OBJECT_ID función para convertir el nombre de la tabla (table_name) en el ID de la tabla y especifica la TableFulltextKeyColumn propiedad, de la siguiente manera:
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';
Ejemplos
El siguiente ejemplo devuelve el identificador de la columna de clave de texto completo o NULL.
NULL Implica que estás usando un nombre de índice inválido, que el nombre del índice no corresponde a la tabla, que la tabla no existe, o cosas por el estilo.
USE AdventureWorks2025;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
El siguiente ejemplo muestra cómo usar el identificador de la columna clave única para obtener el nombre de la columna.
USE AdventureWorks2025;
GO
DECLARE @key_column AS 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 inválido, el nombre del índice no correspondía a la tabla, la tabla no existía, y así sucesivamente, devuelve NULL.
Indexar columnas varbinary(max) y XML
Si indexas en texto completo una columna varbinary(max),varbinary o xml , puedes consultarlo usando los predicados de texto completo (CONTAINS y FREETEXT) y funciones (CONTAINSTABLE y FREETEXTTABLE), como cualquier otra columna indexada en texto completo.
Indexado de datos varbinary(máximo) o varbinary
Una sola columna varbinary(max) o varbinary puede almacenar muchos tipos de documentos. El Motor de base de datos admite cualquier tipo de documento para el que esté instalado un filtro y disponible en el sistema operativo. La extensión de archivo del documento identifica el tipo de cada documento. Por ejemplo, para una .doc extensión de archivo, la búsqueda en texto completo utiliza el filtro que soporta 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 filtros del sistema, los separadores de palabras y los lematizadores del sistema operativo, debe cargarlos en la instancia del servidor, como sigue:
EXECUTE 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) . Debes almacenar esta información en una columna de tabla, llamada columna de tipo, que asocies con 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 más información sobre indexación y consulta en una columna xml , véase Usar búsqueda en texto completo con columnas XML.
Deshabilitar o volver a habilitar la indexación de texto completo de una tabla
En el Motor de base de datos, todas las bases de datos creadas por el usuario están habilitadas para texto completo por defecto. 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, puedes desactivar o volver a activar manualmente una tabla para indexar texto completo usando SQL Server Management Studio.
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.
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.
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
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.
Seleccione Eliminar índice de texto completo.
Cuando se le solicite, seleccione Aceptar para confirmar que desea eliminar el índice de texto completo.