martes, 16 de febrero de 2010

Full-Text Search II: Implementar FTS

Vamos con la continuacion del articulo anterior, esta vez viendo como implementar FTS.

Para ello abre el Management Studio y conéctate a la instancia en la que queremos configurar el catalogo.


Abre el editor de consultas y ejecuta:

CREATE FULL TEXT CATALOG EjemploCatalogoFTS

Si FTS no estuviera habilitado para la base de datos recibirás este error:

Msg 7616, Level 16, State 100, Line 1
Full-Text Search is not enabled for the current database. Use sp_fulltext_database to enable full-text search for the database. The functionality to disable and enable full-text search for a database is deprecated. Please change your application.



Para ver si esta activado o no FTS, puedes abrir las propiedades de la base de datos donde queremos habilitarlo. Luego vamos al apartado "files" ahí encontramos una casilla de verificación que habilita FTS "Use full-text indexing".


Si FTS está habilitado el mensaje recibido por el motor será:

Command(s) completed successfully



Si se ha creado satisfactoriamente el catalogo podremos encontrar un archivo con el nombre del catalogo en la ruta por defecto de SQL (c:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\) que se usa para almacenar el catalogo y los índices de los datos.

Después de haber habilitado FTS y de haber creado nuestro primer catalogo, podemos ver el nuevo catalogo usando el explorador de objetos del Management Studio, lo encontramos en "Instancia->Base de Datos->Storage->Full Text Catalogs->Nombre de catalogo". Si no aparece acuérdate de refrescar el Explorador de objetos, si aun así no apareciera puede ser que haya habido algún problema en la creación si es así empezad comprobando los permisos NTFS.

También podemos usar el Management Studio para crear los catálogos pinchando sobre "Full Text Catalogs" con el botón derecho del ratón y clickando sobre "New Full-Text Catalog..."


Se nos abrirá la siguiente ventana en donde podemos rellenar el nombre, la ubicación y otras opciones validas (recordad que si queréis podéis pasar estas opciones una vez completadas al editor de consultas pinchando en la parte de arriba de la ventana donde pone "Script").


Después de crear el catalogo ya lo tenemos todo listo para crear nuestros índices FTS. Antes de crearlos en una tabla tenemos que estar seguros que exista un índice único en la tabla (en otra columna) el cual se usara para mapear los resultados a los registros de la tabla. Para crear nuestro índice FTS usaremos esta sentencia:

CREATE FULLTEXT INDEX ON Complaints(ComplaintDetails)

KEY INDEX PK_Complaints ON EjemploCatalogoFTS

WITH CHANGE_TRACKING AUTO



Fijaros que debemos de proporcionarle la tabla y columna donde queremos crearlo, además de el nombre y el catalogo donde se almacenara. También tenemos que decir si queremos que los cambios en el texto indexado queremos que se propaguen al índice de manera automática, manual o que no se propaguen (AUTO MANUAL OFF). Si pusiéramos manual para propagar esos cambios tendremos que ejecutar la siguiente sentencia, la cual podremos programar para que se haga periódicamente con el asistente para tareas automatizadas:

ALTER FULLTEXT INDEX PK_Complaints START UPDATE POPULATION


Una vez creado el índice vamos a ver como usamos FTS para tener una manera rápida y eficaz de resolver consultas en una columna donde contenemos texto.

Recordemos una de las consultas usadas con el método tradicional:

SELECT * FROM Notes Table WHERE Notes Like ‘%Full-Text Search%'



Esta consulta usando FTS seria así:

SELECT * FROM NotesTable WHERE CONTAINS(Notes, N'Full-Text Search')



Para acabar de completar la manera de usar FTS os aconsejo que os paséis por este enlace de TechNet donde veréis como usar las condiciones de búsqueda SQL en Transact-SQL

Bueno ya sabemos cómo mejorar considerablemente las consultas que incluyen columnas de texto largo. Hemos visto como implementarlo y ponerlo en funcionamiento, espero este articulo os sea de ayuda.

Un Saludo y Hasta Pronto.

1 comentario:

  1. BUEN APORTE, ME SIRVIO MUCHO EN LA ESCUELA.
    ES EXACTAMENTE MI TAREA. GRACIAS

    ResponderEliminar

Te resulta interesante esta informacion? Tienes alguna duda? Adelante hazmelo saber