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.
Las bases de datos de SQL Server están habilitadas de forma predeterminada en texto completo. Sin embargo, para usar un índice de texto completo en una tabla, debe configurar la funcionalidad de indexación de texto completo en las columnas de las tablas a las que desea acceder mediante el motor de Full-Text.
Configuración de una base de datos para la búsqueda de Full-Text
En cualquier escenario, un administrador de bases de datos realiza los siguientes pasos básicos para configurar columnas de tabla en una base de datos para la búsqueda de texto completo:
Cree un catálogo de texto completo.
En cada tabla que desee buscar, cree un índice de texto completo mediante:
Identifique cada columna de texto que desee incluir en el índice de texto completo.
Si una columna determinada contiene documentos almacenados como datos binarios (
varbinary(max)oimagedatos), debe especificar una columna de tabla (la columna de tipo) que identifique el tipo de cada documento de la columna que se está indizando.Especifique el idioma que desea que la búsqueda de texto completo use en los documentos de la columna.
Elija el mecanismo de seguimiento de cambios que desea usar en el índice de texto completo para realizar un seguimiento de los cambios en la tabla base y sus columnas.
La búsqueda de texto completo admite varios idiomas mediante el uso de los siguientes componentes lingüísticos: separadores de palabras y lematizadores, listas de palabras vacías que contienen palabras vacías (también conocidas como palabras de ruido) y archivos de diccionario de sinónimos. Los archivos de sinónimos y, en algunos casos, las listas de exclusión requieren la configuración de un administrador de bases de datos. Un archivo de sinónimos determinado admite todos los índices de texto completo que usan el idioma correspondiente y una lista de palabras irrelevantes determinada puede asociarse con tantos índices de texto completo como desee.
Configuración de un catálogo y un índice de Full-Text
Esto implica los siguientes pasos básicos:
Cree un catálogo de texto completo para almacenar índices de texto completo.
Cada índice de texto completo debe pertenecer a un catálogo de texto completo. Puede crear un catálogo de texto independiente para cada índice de texto completo o puede asociar varios índices de texto completo a un catálogo determinado. Un catálogo de texto completo es un objeto virtual y no pertenece a ningún grupo de archivos. El catálogo es un concepto lógico que hace referencia a un grupo de índices de texto completo.
Cree un índice de texto completo en la tabla o vista indizada.
Un índice de texto completo es un tipo especial de índice funcional basado en tokens creado y mantenido por el motor de Full-Text. Para crear una búsqueda de texto completo en una tabla o vista, debe tener un índice único de una sola columna y no anulable. El motor de Full-Text requiere este índice único para asignar cada fila de la tabla a una clave comprimible única. Un índice de texto completo puede incluir
char,varchar,nchar,nvarchar,text,ntext,image,xml,varbinaryyvarbinary(max)columnas. Para obtener más información, vea Crear y administrar índices de Full-Text.
Antes de aprender a crear índices de texto completo, es importante tener en cuenta cómo difieren de los índices normales de SQL Server. En la tabla siguiente se enumeran las diferencias.
| Índices de texto completo | Índices normales de SQL Server |
|---|---|
| Solo se permite un índice de texto completo por tabla. | Se permiten varios índices normales por tabla. |
| La adición de datos a los índices de texto completo, denominada población, se puede solicitar mediante una programación o una solicitud específica, o puede producirse automáticamente con la adición de nuevos datos. | Se actualiza automáticamente cuando los datos en los que se basan se insertan, actualizan o eliminan. |
| Agrupada dentro de la misma base de datos en uno o varios catálogos de texto completo. | No agrupado. |
Elegir opciones para un índice Full-Text
En esta sección se describe lo siguiente:
Elección del idioma de la columna
Elección de un grupo de archivos para un índice de texto completo
Asignar el índice de texto completo a un catálogo de texto completo
Asociación de una lista de palabras irrelevantes con el índice de texto completo
Actualización de un índice de texto completo
Elección del idioma de columna
Para obtener información sobre las cosas que se deben tener en cuenta al elegir el idioma de columna, vea Elegir un idioma al crear un índice de Full-Text.
Elección de un grupo de archivos para un índice de Full-Text
El proceso de creación de un índice de texto completo es bastante intensivo de E/S (en un nivel alto, consiste en leer datos de SQL Server y, a continuación, propagar los datos filtrados al índice de texto completo). Como procedimiento recomendado, busque un índice de texto completo en el grupo de archivos de base de datos que sea mejor para maximizar el rendimiento de E/S o busque los índices de texto completo en un grupo de archivos diferente en otro volumen.
Cuando la facilidad de administración es importante para usted, se recomienda almacenar datos de tabla y todos los catálogos de texto completo afiliados en el mismo grupo de archivos. A veces, por motivos de rendimiento, es posible que desee tener los datos de la tabla y el índice de texto completo en diferentes grupos de archivos almacenados en diferentes volúmenes para maximizar el paralelismo de E/S.
Asignando el índice de Full-Text a un catálogo de Full-Text
Es importante planear la colocación de índices de texto completo para tablas en catálogos de texto completo.
Se recomienda asociar tablas con las mismas características de actualización (por ejemplo, un número reducido de cambios frente a un gran número de cambios o tablas que cambian con frecuencia durante una hora determinada del día) juntas en el mismo catálogo de texto completo. Al configurar programaciones de rellenado de catálogos de texto completo, los índices de texto completo permanecen sincrónicos con las tablas sin afectar negativamente al uso de recursos del servidor de bases de datos durante períodos de actividad elevada de la base de datos.
Al asignar una tabla a un catálogo de texto completo, tenga en cuenta las instrucciones siguientes:
Seleccione siempre el índice único más pequeño disponible para la clave única de texto completo. (Un índice basado en enteros de 4 bytes es óptimo). Esto reduce significativamente los recursos requeridos por el servicio Microsoft Search en el sistema de archivos. Si la clave principal es grande (más de 100 bytes), considere la posibilidad de elegir otro índice único en la tabla (o crear otro índice único) como clave única de texto completo. De lo contrario, si el tamaño de la clave única de texto completo supera el tamaño máximo permitido (900 bytes), la población de texto completo no podrá continuar.
Si va a indexar una tabla que tiene millones de filas, asigne la tabla a su propio catálogo de texto completo.
Tenga en cuenta la cantidad de cambios que se producen en las tablas que están indexadas de texto completo, así como el número total de filas. Si el número total de filas que se están cambiando, junto con las filas de la tabla presentes durante la última población de texto completo, representan millones de filas, asigne la tabla a su propio catálogo de texto completo.
Asociación de una lista de exclusión con el índice de Full-Text
SQL Server 2008 presenta listas de palabras irrelevantes. Una lista de stopwords es una lista de palabras vacías, también conocidas como palabras de ruido. Una lista de palabras irrelevantes está asociada a cada índice de texto completo y las palabras de esa lista de palabras irrelevantes se aplican a las consultas de texto completo de ese índice. De forma predeterminada, la lista de palabras irrelevantes del sistema está asociada a un nuevo índice de texto completo. Sin embargo, puede crear y usar su propia lista de palabras vacías en su lugar. Para obtener más información, vea Configurar y administrar palabras irrelevantes y listas de palabras irrelevantes para la búsqueda de texto completo.
Por ejemplo, la siguiente instrucción CREATE FULLTEXT STOPLISTTransact-SQL crea una nueva lista de exclusión de texto completo denominada myStoplist3 a partir de la lista de exclusión del sistema.
CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;
GO
La siguiente instrucción ALTER FULLTEXT STOPLISTTransact-SQL modifica una lista de exclusión de texto completo denominada myStoplist, agregando la palabra "en", primero en español y luego en francés.
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'Spanish';
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'French';
GO
Actualización de un índice de Full-Text
Al igual que los índices normales de SQL Server, los índices de texto completo se pueden actualizar automáticamente a medida que los datos se modifican en las tablas asociadas. Este es el comportamiento predeterminado. Como alternativa, puede mantener los índices de texto completo up-to-date manualmente o a intervalos programados especificados. Rellenar un índice de texto completo puede consumir mucho tiempo y consumir recursos, por lo que la actualización de índices suele realizarse como un proceso asincrónico que se ejecuta en segundo plano y mantiene actualizado el índice de texto completo después de las modificaciones en la tabla base. La actualización de un índice de texto completo inmediatamente después de cada cambio en la tabla base puede consumir muchos recursos. Por lo tanto, si tiene una tasa de actualización, inserción o eliminación muy alta, es posible que experimente alguna degradación en el rendimiento de las consultas. Si esto ocurre, considere la posibilidad de programar actualizaciones manuales de seguimiento de cambios para mantenerse al día con los numerosos cambios de vez en cuando, en lugar de competir con consultas para recursos.
Para controlar el estado de la población, use las funciones FULLTEXTCATALOGPROPERTY o OBJECTPROPERTYEX. Para obtener el estado de población del catálogo, ejecute la instrucción siguiente:
SELECT FULLTEXTCATALOGPROPERTY('AdvWksDocFTCat', 'Populatestatus');
Típicamente, si una población completa está en curso, el resultado devuelto es 1.
Ejemplo: Configuración de Full-Text Search
En el siguiente ejemplo de dos partes se crea un catálogo de texto completo denominado AdvWksDocFTCat en la base de datos AdventureWorks y, a continuación, se crea un índice de texto completo en la Document tabla de AdventureWorks2012. Esta instrucción crea el catálogo de texto completo en el directorio predeterminado especificado durante la instalación. La carpeta denominada AdvWksDocFTCat está en el directorio predeterminado.
Para crear un catálogo de texto completo denominado
AdvWksDocFTCat, en el ejemplo se usa una instrucción CREATE FULLTEXT CATALOG :USE AdventureWorks; GO CREATE FULLTEXT CATALOG AdvWksDocFTCat;Para poder crear un índice de texto completo en la tabla Document, asegúrese de que la tabla tiene un índice único y que no acepta valores NULL. La siguiente instrucción CREATE INDEX crea un índice único,
ui_ukDoc, en la columna DocumentID de la tabla Document:CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);Después de tener una clave única, puede crear un índice de texto completo en la
Documenttabla mediante la siguiente instrucción CREATE FULLTEXT INDEX .CREATE FULLTEXT INDEX ON Production.Document ( Document --Full-text index column name TYPE COLUMN FileExtension --Name of column that contains file type information Language 2057 --2057 is the LCID for British English ) KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index WITH CHANGE_TRACKING AUTO --Population type; GOLa COLUMNA TIPO definida en este ejemplo especifica la columna 'Tipo' en la tabla que contiene el tipo del documento en cada fila de la columna 'Documento' (que es de tipo binario). La columna type almacena la extensión de archivo proporcionada por el usuario:".doc", ".xls", por lo que on-of el documento en una fila determinada. El motor de Full-Text usa la extensión de archivo en una fila determinada para invocar el filtro correcto que se va a usar para analizar los datos de esa fila. Una vez que el filtro ha analizado los datos binarios de la fila, el separador de palabras especificado analizará el contenido (en este ejemplo, se usa el separador de palabras para inglés británico). Tenga en cuenta que el proceso de filtrado solo se produce en el momento de la indexación o si un usuario inserta o actualiza una columna en la tabla base mientras el seguimiento automático de cambios está habilitado para el índice de texto completo. Para obtener más información, vea Configurar y administrar filtros para la búsqueda.
Tareas comunes
Para crear un catálogo de Full-Text
Para ver los índices de una tabla (o vista)
Para crear un índice único
Para crear un índice de Full-Text
Ver información sobre un índice Full-Text
| Vista de administración dinámica o catálogo | Descripción |
|---|---|
| sys.fulltext_index_catalog_usages (Transact-SQL) | Devuelve una fila para cada catálogo de texto completo a la referencia de í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 usa tablas internas denominadas fragmentos de índice de texto completo para almacenar los datos de índice invertidos. Esta vista se puede usar para consultar los metadatos sobre estos fragmentos. Esta vista contiene una fila para cada fragmento de índice de texto completo de 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 sobre las poblaciones de índices de texto completo actualmente en curso. |
Véase también
CREAR CATÁLOGO DE TEXTO COMPLETO (Transact-SQL)
CREAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)
CREAR LISTA DE EXCLUSIÓN DE TEXTO COMPLETO (Transact-SQL)
CREATE TABLE (Transact-SQL)
Rellenar índices de texto completo
FULLTEXTCATALOGPROPERTY (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)