Habilitar la búsqueda semántica en tablas y columnas
Se aplica a: SQL Server
Describe cómo habilitar o deshabilitar la indización semántica estadística de las columnas seleccionadas que contienen documentos o texto.
La búsqueda semántica estadística usa los índices creados por búsqueda de texto completo y crea índices adicionales. Como resultado de esta dependencia en la búsqueda de texto completo, se crea un nuevo índice semántico al definir un nuevo índice de texto completo o al modificar un índice de texto completo existente. Puede crear un nuevo índice semántico mediante instrucciones de Transact-SQL o mediante el asistente para indexación de texto completo y otros cuadros de diálogo de SQL Server Management Studio, como se describe en este artículo.
Creación de un índice semántico
Requisitos y restricciones para crear un índice semántico
Puede crear un índice en cualquiera de los objetos de base de datos admitidos para la indización de texto completo, incluidas las tablas y las vistas indizadas.
Para poder habilitar la indización semántica de columnas específicas, deben existir los siguientes requisitos previos:
Establece el catálogo de texto completo predeterminado para la base de datos.
La tabla debe tener un índice de texto completo.
Las columnas seleccionadas deben participar en el índice de texto completo.
Puede crear y habilitar todas estos requisitos a la vez.
Puede crear un índice en columnas que contenga cualquiera de los tipos de datos admitidos para la indización de texto completo. Para obtener más información, vea Crear y administrar índices de texto completo.
Puede especificar cualquier tipo de documento admitido para la indexación de texto completo para las columnas varbinary(max) . Para obtener más información, vea Tutorial: Cómo determinar qué tipos de documento se pueden indexar en este artículo.
La indexación semántica crea dos tipos de índices para las columnas que seleccione: un índice de frases clave y un índice de similitud de documentos. No puede seleccionar solo un tipo de índice ni el otro al habilitar la indexación semántica. Sin embargo, puede consultar estos dos índices por separado. Para obtener más información, vea Buscar frases clave en documentos con la búsqueda semántica y Buscar documentos similares y relacionados con la búsqueda semántica.
Si no especifica explícitamente un LCID para un índice semántico, solo se usan el idioma principal y sus estadísticas de idioma asociadas para la indexación semántica.
Si especifica un idioma para una columna para la que el modelo de lenguaje no está disponible, se produce un error en la creación del índice y se devuelve un mensaje de error.
Creación de un índice semántico cuando no hay ningún índice de texto completo
Al crear un nuevo índice de texto completo con la instrucción CREATE FULLTEXT INDEX
, puede habilitar la indexación semántica en el nivel de columna especificando la palabra clave STATISTICAL_SEMANTICS
como parte de la definición de columna. Asimismo, puede habilitar la indización semántica cuando use el Asistente para indización de texto completo con el fin de crear un nuevo índice de texto completo.
Crear un nuevo índice semántico con Transact-SQL
Llame a la instrucción CREATE FULLTEXT INDEX
y especifique STATISTICAL_SEMANTICS
para cada columna en la que desea crear un índice semántico. Para obtener más información sobre todas las opciones de esta instrucción, consulte CREATE FULLTEXT INDEX (Transact-SQL).
Ejemplo 1: crear un índice único, un índice de texto completo y un índice semántico
En el ejemplo siguiente se crea un catálogo de texto completo predeterminado, ft
. A continuación, el ejemplo crea un índice único en la columna JobCandidateID
de la tabla HumanResources.JobCandidate
de la base de datos de ejemplo AdventureWorks2022
. Este índice único se requiere como columna de clave de un índice de texto completo. A continuación, el ejemplo crea un índice de texto completo y un índice semántico en la columna.Resume
.
CREATE FULLTEXT CATALOG ft AS DEFAULT
GO
CREATE UNIQUE INDEX ui_ukJobCand
ON HumanResources.JobCandidate(JobCandidateID)
GO
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
(Resume
Language 1033
Statistical_Semantics
)
KEY INDEX JobCandidateID
WITH STOPLIST = SYSTEM
GO
Ejemplo 2: Crear un índice de texto completo y semántico en varias columnas con rellenado de índice retrasado
En el ejemplo siguiente se crea un catálogo de texto completo, documents_catalog
, en la base de datos de ejemplo AdventureWorks2022
. A continuación, se crea un índice de texto completo que usa este nuevo catálogo. El índice de texto completo se crea en las columnas Title
, DocumentSummary
y Document
de la tabla Production.Document
, mientras que el índice semántico solo se crea en la columna Document
. Este índice de texto completo usa el catálogo de texto completo recién creado y un índice de clave único existente, PK_Document_DocumentID
. Como se recomienda, esta clave de índice se crea en una columna de enteros, DocumentID
. En el ejemplo se especifica el LCID de inglés, 1033, que es el idioma de los datos de las columnas.
En este ejemplo también se especifica que el seguimiento de cambios está desactivado sin rellenado. Más adelante, durante las horas de poca actividad, en el ejemplo se usa una instrucción ALTER FULLTEXT INDEX
para iniciar un rellenado completo en el nuevo índice y habilitar el seguimiento automático de cambios.
CREATE FULLTEXT CATALOG documents_catalog
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
Statistical_Semantics
)
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH CHANGE_TRACKING OFF, NO POPULATION
GO
Posteriormente, durante horas de menor actividad, el índice se rellena:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO
Crear un nuevo índice semántico con SQL Server Management Studio
Ejecute el Asistente para indexación de texto completo y habilite Semántica estadística en la página Seleccionar columnas de la tabla para cada columna en la que quiera crear un índice semántico. Para obtener más información, incluida la información sobre cómo iniciar el Asistente para indexación de texto completo, vea Usar el Asistente para indexación de texto completo.
Crear un índice semántico cuando haya un índice de texto completo existente
Puede agregar la indexación semántica al modificar un índice de texto completo existente con la instrucción ALTER FULLTEXT INDEX
. También puede agregar la indexación semántica mediante varios cuadros de diálogo en SQL Server Management Studio.
Agregar un índice semántico con Transact-SQL
Llame a la instrucción ALTER FULLTEXT INDEX
con las opciones descritas en la sección siguiente para cada columna en la que desea agregar un índice semántico. Para obtener más información sobre todas las opciones de esta instrucción, consulte ALTER FULLTEXT INDEX (Transact-SQL).
Los índices de texto completo y semántico se rellenan después de una llamada a ALTER
, a menos que especifique lo contrario.
Para agregar la indexación de texto completo solo a una columna, use la sintaxis
ADD
.Para agregar tanto texto completo como indexación semántica a una columna, use la sintaxis
ADD
con la opciónSTATISTICAL_SEMANTICS
.Para agregar la indexación semántica a una columna que ya está habilitada para la indexación de texto completo, use la opción
ADD STATISTICAL_SEMANTICS
. Solo puede agregar la indexación semántica a una columna en una sola instrucciónALTER
.
Ejemplo: agregar una indización semántica a una columna que ya tenga indización de texto completo
En el ejemplo siguiente se modifica un índice de texto completo existente en la tabla Production.Document
de la base de datos de ejemplo de AdventureWorks2022
. En el ejemplo se agrega un índice semántico en la columna Document
de la tabla Production.Document
, que ya tiene un índice de texto completo. En el ejemplo se especifica que el índice no se vuelve a rellenar automáticamente.
ALTER FULLTEXT INDEX ON Production.Document
ALTER COLUMN Document
ADD Statistical_Semantics
WITH NO POPULATION
GO
Agregar un índice semántico con SQL Server Management Studio
Puede cambiar las columnas habilitadas para la indexación semántica y de texto completo en la página Columnas de índice de texto completo del cuadro de diálogo Propiedades del índice de texto completo . Para obtener más información, vea Administrar índices de texto completo.
Modificar un índice semántico
Requisitos y restricciones para modificar un índice existente
No se puede modificar un índice existente mientras el rellenado del índice está en curso. Para obtener más información sobre cómo supervisar el progreso del rellenado de índices, vea Administrar y supervisar la búsqueda semántica.
No se puede agregar la indexación a una columna y modificar o quitar la indexación de la misma columna, en una sola llamada a la instrucción
ALTER FULLTEXT INDEX
.
Quitar un índice semántico
Puede quitar la indexación semántica al modificar un índice de texto completo existente con la instrucción ALTER FULLTEXT INDEX
. También puede quitar la indexación semántica mediante varios cuadros de diálogo en SQL Server Management Studio.
Agregar o quitar un índice semántico con Transact-SQL
Para quitar la indexación semántica solo desde una columna o columnas, llame a la instrucción ALTER FULLTEXT INDEX
con la opción ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS
. Puede quitar la indexación de varias columnas en una sola instrucción ALTER
.
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS;
GO
Para quitar el texto completo y la indexación semántica de una columna, llame a la instrucción ALTER FULLTEXT INDEX
con la opción ALTER COLUMN <column_name> DROP
.
USE database_name;
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP;
GO
Eliminación de un índice semántico con SQL Server Management Studio
Puede cambiar las columnas habilitadas para la indexación semántica y de texto completo en la página Columnas de índice de texto completo del cuadro de diálogo Propiedades del índice de texto completo . Para obtener más información, vea Administrar índices de texto completo.
Requisitos y restricciones para quitar un índice semántico
No se puede quitar la indexación de texto completo de una columna mientras se conserva la indexación semántica. La indización semántica depende de la indización de texto completo para los resultados de similitud de documentos.
No se puede especificar la opción
NO POPULATION
al quitar la indexación semántica de la última columna de una tabla para la que se ha habilitado la indexación semántica. Se requiere un ciclo de rellenado para quitar los resultados que se indizaron previamente.
Comprobar si la búsqueda semántica está habilitada en objetos de base de datos
¿La búsqueda semántica está habilitada para una base de datos?
Consulte la propiedad IsFullTextEnabled
de la función de metadatos DATABASEPROPERTYEX (Transact-SQL).
Un valor devuelto de 1
indica que la búsqueda de texto completo y la búsqueda semántica están habilitadas para la base de datos. Un valor devuelto de 0
indica que no están habilitados.
SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO
¿La búsqueda semántica está habilitada para una tabla?
Consulte la propiedad TableFullTextSemanticExtraction
de la función de metadatos OBJECTPROPERTYEX (Transact-SQL).
Un valor devuelto de 1 indica que la búsqueda semántica está habilitada para la tabla; un valor devuelto de 0 indica que no está habilitado.
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO
¿La búsqueda semántica está habilitada para una columna?
Para determinar si la búsqueda semántica está habilitada para una columna específica:
Consulte la propiedad
StatisticalSemantics
de la función de metadatos COLUMNPROPERTY (Transact-SQL).Un valor devuelto de 1 indica que la búsqueda semántica está habilitada para la columna; un valor devuelto de 0 indica que no está habilitado.
SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics'); GO
Consulte la vista de catálogo sys.fulltext_index_columns (Transact-SQL) para el índice de texto completo.
Un valor de 1 en la columna
statistical_semantics
indica que la columna especificada está habilitada para la indexación semántica además de la indexación de texto completo.SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name'); GO
En el Explorador de objetos de Management Studio, haga clic con el botón derecho en una columna y seleccione Propiedades. En la página General del cuadro de diálogo Propiedades de columna , compruebe el valor de la propiedad Semántica estadística .
Un valor True indica que la columna especificada está habilitada para la indización semántica además de la indización de texto completo.
Determinar qué se puede indexar para la búsqueda semántica
Comprobación de los idiomas que se admiten para la búsqueda semántica
Hay menos idiomas que sean compatibles con la indización semántica que con la indización de texto completo. Como resultado, puede haber columnas que pueda indizar para la búsqueda de texto completo, pero que no para la búsqueda semántica.
Consulte la vista de catálogo sys.fulltext_semantic_languages (Transact-SQL).
SELECT * FROM sys.fulltext_semantic_languages;
GO
Los siguientes idiomas se admiten para la indización semántica. Esta lista representa la salida de la vista de catálogo sys.fulltext_semantic_languages (Transact-SQL), ordenada por LCID.
Lenguaje | LCID |
---|---|
Chino tradicional | 1028 |
Alemán | 1031 |
Inglés (EE. UU.) | 1033 |
Francés | 1036 |
Italiano | 1040 |
Portugués (Brasil) | 1046 |
Ruso | 1049 |
Sueco | 1053 |
Chino simplificado | 2052 |
British English | 2057 |
Portugués | 2070 |
Chino (Hong Kong, SAR, PRC) | 2070 |
Español | 3082 |
Chinese (Singapore) | 4100 |
Chinese (Macao SAR) | 5124 |
Nota:
Si los resultados están vacíos, debe descargar e instalar la base de datos estadísticas de lenguaje semántico. Para obtener más información, consulte Instalar, adjuntar y registrar la base de datos de estadísticas de lenguaje semántico.
Determinar qué tipos de documento se pueden indexar
Consulte la vista de catálogo sys.fulltext_document_types (Transact-SQL).
Si el tipo de documento que desea indexar no está en la lista de tipos admitidos, es posible que tenga que buscar, descargar e instalar filtros adicionales. Para obtener más información, consulte ver o cambiar los filtros registrados y separadores de palabras.
Procedimiento recomendado: Crear un grupo de archivos independiente para los índices semánticos y de texto completo
Plantéese crear un grupo de archivos independiente para los índices de texto completo y semántico si la asignación de espacio en disco es un problema. Los índices semánticos se crean en el mismo grupo de archivos que el índice de texto completo. Un índice semántico totalmente rellenado puede contener una gran cantidad de datos.
Problema: La búsqueda en una columna específica no devuelve ningún resultado
¿Se especificó un LCID que no sea Unicode para un idioma Unicode?
Se puede habilitar la indización semántica en un tipo de columna que no sea Unicode con un LCID para un idioma que solo tenga palabras Unicode, como LCID 1049 para ruso. En este caso, nunca se devuelve ningún resultado de los índices semánticos de esta columna.