Compartir a través de


Habilitar la búsqueda semántica en tablas y columnas

Describe cómo habilitar o deshabilitar la indexación semántica estadística en columnas seleccionadas que contienen documentos o texto.

Búsqueda semántica estadística usa los índices creados por Full-Text Search 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 cuando se modifica un índice de texto completo existente. Puede crear un nuevo índice semántico mediante instrucciones Transact-SQL o mediante el Asistente para indexación de Full-Text y otros cuadros de diálogo en SQL Server Management Studio, como se describe en este tema.

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 que se admiten para la indexación de texto completo, incluidas las tablas y las vistas indizadas.

  • Para poder habilitar la indexación semántica para columnas específicas, deben existir los siguientes requisitos previos:

    • Debe existir un catálogo de texto completo 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 todos estos requisitos al mismo tiempo.

  • Puede crear un índice semántico en columnas que tengan cualquiera de los tipos de datos que se admiten para la indexación de texto completo. Para obtener más información, vea Crear y administrar índices de Full-Text.

  • Puede especificar cualquier tipo de documento compatible con la indexación de texto completo para las columnas varbinary(max). Para obtener más información, vea Cómo: Determinar qué tipos de documento se pueden indexar en este tema.

  • La indexación semántica crea dos tipos de índices para las columnas que se seleccionan: un índice de frases clave y un índice de similitud de documentos. No se puede seleccionar solo un tipo de índice ni el otro al habilitar la indexación semántica. Sin embargo, puede consultar estos dos índices de forma independiente. Para obtener más información, vea Buscar frases clave en documentos con 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 lenguaje 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.

Cómo: Crear un índice semántico cuando no hay ningún índice de Full-Text

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. También puede habilitar la indexación semántica al usar el Asistente para indexación de Full-Text para crear un nuevo índice de texto completo.

Creación de un nuevo índice semántico mediante 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, vea 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 AdventureWorks2012. Este índice único es necesario como columna de clave para un índice de texto completo. A continuación, el ejemplo crea un índice de texto completo y un índice semántico en la columna Reanudar .

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 población de índices retrasada

En el ejemplo siguiente se crea un catálogo de texto completo, documents_catalog, en la base de datos de ejemplo AdventureWorks2012. A continuación, el ejemplo 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 entera, DocumentID. En el ejemplo se especifica el LCID para 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 población. 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  

Más adelante, en un momento de baja demanda, el índice se rellena.

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO  
GO  

Creación de un nuevo índice semántico mediante SQL Server Management Studio
Ejecute el Asistente para indexación de Full-Text y habilite la semántica estadística en la página Seleccionar columnas de tabla para cada columna en la que desea 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 Full-Text, vea Usar el Asistente para indexación de Full-Text.

Cómo: Crear un índice semántico cuando hay un índice de Full-Text 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.

Adición de un índice semántico mediante Transact-SQL
Llame a la instrucción ALTER FULLTEXT INDEX con las opciones descritas a continuación 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, vea ALTER FULLTEXT INDEX (Transact-SQL).

Los índices de texto completo y semántico se repoblan 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ón STATISTICAL_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ón ALTER .

Ejemplo: Agregar indexación semántica a una columna que ya tiene indexació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 AdventureWorks2012. 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 volverá a rellenar automáticamente.

ALTER FULLTEXT INDEX ON Production.Document  
    ALTER COLUMN Document  
        ADD Statistical_Semantics  
    WITH NO POPULATION  
GO  

Adición de un índice semántico mediante SQL Server Management Studio
Puede cambiar las columnas que están habilitadas para la indexación semántica y de texto completo en la página Columnas de índice deFull-Text del cuadro de diálogo Propiedades de índice deFull-Text . Para obtener más información, consulte Administración de índices de Full-Text.

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 .

Eliminar un índice semántico

Cómo eliminar 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.

Eliminación de un índice semántico mediante Transact-SQL

  • Para quitar la indexación semántica solamente de una o más columnas, utilice la instrucción ALTER FULLTEXT INDEX con la opción ALTER COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS. Puede quitar la indexación de varias columnas en una sola instrucción ALTER .
```sql  
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 COLUMNcolumn_nameDROP .

    USE database_name  
    GO  
    
    ALTER FULLTEXT INDEX  
        ALTER COLUMN column_name  
        DROP  
    GO  
    

Eliminación de un índice semántico mediante SQL Server Management Studio
Puede cambiar las columnas que están habilitadas para la indexación semántica y de texto completo en la página Columnas de índice deFull-Text del cuadro de diálogo Propiedades de índice deFull-Text . Para obtener más información, consulte Administración de índices de Full-Text.

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 indexación semántica depende de la indexació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 población para eliminar los resultados que se indexaron anteriormente.

Comprobación de si la búsqueda semántica está habilitada en objetos de base de datos

Cómo: Comprobar si la búsqueda semántica está habilitada en objetos de base de datos

¿Está habilitada la búsqueda semántica 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  

¿Está habilitada la búsqueda semántica 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  

¿Está habilitada la búsqueda semántica 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, verifique el valor de la propiedad Semántica Estadística.

    Un valor true indica que la columna especificada está habilitada para la indexación semántica además de la indexación de texto completo.

Cómo: Comprobar qué idiomas se admiten para la búsqueda semántica

Importante

Se admiten menos idiomas para la indexación semántica que para la indexación de texto completo. Como resultado, puede haber columnas que se pueden indexar para la búsqueda de texto completo, pero 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  

Se admiten los siguientes idiomas para la indexació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
Alemán 1031
Inglés (EE. UU.) 1033
Francés 1036
Italiano 1040
Portugués (Brasil) 1046
Ruso 1049
Sueco 1053
Inglés (Reino Unido) 2057
Portugués (Portugal) 2070
Español 3082

Cómo: 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, vea Ver o cambiar filtros registrados y separadores de palabras.

Procedimiento recomendado: Considere la posibilidad de crear un grupo de archivos independiente para los índices Full-Text y semántico

Considere la posibilidad de 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 rellenado completamente puede contener una gran cantidad de datos.

Problema: la búsqueda en columnas específicas no devuelve resultados

¿Se especificó un LCID no Unicode para un idioma Unicode?
Es posible habilitar la indexación semántica en un tipo de columna no Unicode con un LCID para un idioma que solo tenga palabras Unicode, como LCID 1049 para ruso. En este caso, nunca se devolverá ningún resultado de los índices semánticos de esta columna.