Professional Documents
Culture Documents
Enviado por Admin el Domingo, 01 de Febrero de 2004 (Her) FULL-TEXT Search es una herramienta muy poderosa del SQL Server, y adems es relativamente sencilla como comprobamos en este artculo.
El Servicio Microsoft Search es un motor de indexacin y de bsqueda de texto que permite al SQL Server realizar consultas de texto eficaces y sofisticadas sobre columnas que almacenan datos basados en caracteres. Entre las diferencias existentes entre este servicio y las bsquedas que utilizan el operador LIKE podemos citar las siguientes: Se almacenan en el sistema de archivos y no en la base de datos, aunque es la base de datos quien los administra. Slo se permite un ndice de texto por cada tabla. Si se desea agregar datos a los ndices de texto hay que realizar un llenado manual o programado (Tambin se pueden llenar automticamente en la insercin de datos). Son ms rpidos y flexibles. La utilizacin del servicio Microsoft Search tendr dos vertientes. En primer lugar tenemos que crear los ndices de texto en las tablas deseadas y llenarlos, y en segundo lugar el servicio realizar las bsquedas y devolver conjuntos de resultados adecuados al criterio de bsqueda. Pero antes de utilizar este servicio tenemos que instalarlo. El motor de texto se ejecuta como un servicio denominado Microsoft Search en Windows NT Server, Windows 2000 y Windows 2003 Server y tambin se puede instalar durante la instalacin del SQL Server (No est disponible para la versin SQL Server Personal). Para saber si este servicio est instalado en nuestro equipo la manera ms sencilla es recurrir al
Donde podemos ver si el servicio est instalado y adems podemos iniciar o detenerlo a voluntad.
Catlogos de texto
Se llama catlogo de texto al lugar fsico donde se almacenan los ndices de texto de una base de datos. Cada catlogo puede satisfacer las necesidades de indexacin de varias tablas de una base de datos. Estos catlogos de texto se deben ubicar en una unidad de disco local asociada a la instancia de SQL Server (Las unidades extrables, los disquetes y las unidades de red no sirven). En cada servidor pueden crearse hasta 256 catlogos de texto
ndices de texto
Los ndices de texto se vinculan a una columna de una tabla. Un primer requisito es que la tabla en cuestin tiene que tener un ndice exclusivo, que debe ser lo ms pequeo posible para reducir los recursos utilizados por el servicio Microsoft Search. Este ndice que creamos sobre una columna de texto almacenar informacin sobre cada palabra que contiene la columna y su ubicacin dentro de la tabla. Los ndices se pueden actualizar (como los ndices normales del SQL Server) al modificar los datos de la tabla, o se pueden llenar a intervalos regulares. Estos procesos de llenado se suelen realizar de forma asncrona y en segundo plano porque consumen tiempo y recursos.
Para crear un catlogo de texto podemos utilizar el Administrador Corporativo con los asistentes y el interfaz grfico proporcionado, o podemos hacerlo mediante sentencias TSQL. En este caso vamos a utilizar la segunda opcin porque es un mtodo ms ilustrativo y porque si conocemos este camino usar los asistentes es muy sencillo. Vamos pues a ver paso a paso que sentencias y procedimientos almacenados intervienen en la creacin de nuestro catlogo de texto. 1-Comprobar que el servicio Microsoft Search esta funcionando Ya hemos visto un modo sencillo de comprobar esto con el Administrador de Servicios del SQL
Server. Si no est instalado hay que hacerlo y ponerlo en funcionamiento. 2-Crear una base de datos y habilitarla para utilizar catlogos de texto En vez de crear una base de datos por sencillez vamos a utilizar la base de datos Northwind que viene instalada con el SQL Server. Habilitarla para usar catlogos de texto se traduce en ejecutar la sentencia sp_fulltext_Database en el Analizador de Consultas:
use Northwind go sp_fulltext_Database 'enable'
3-Crear un catlogo vinculado con esta base de datos Utilizamos el procedimiento almacenado sp_fulltext_catalog que crea o quita un catlogo de texto, e inicia o detiene la accin de indizacin de un catlogo (luego lo veremos). Este procedimiento recibe un par de parmetros. El primero es el nombre del catlogo y el segundo indica la accin a realizar. Vamos a crear un catlogo que se llame Ingredientes.
sp_fulltext_catalog 'Ingredientes','create'
4-Habilitamos la tabla para usar ndices de texto Ahora escogemos la tabla que queremos indizar y habilitamos y aadimos esa tabla a nuestro catlogo. Para hacerlo usamos el procedimiento almacenado sp_fulltext_table. Este procedimiento funciona de la siguiente manera:
sp_fulltext_table nombre de la tabla, accin, catalogo, ndice nico de la tabla
donde PK_Products es una clave nica definida en nuestra tabla. 5-Habilitar la columna que contendr las palabras a buscar El procedimiento almacenado sp_fulltext_column especifica si una columna particular de una tabla participa en la indizacin de texto. Habilitemos la columna ProductName
sp_fulltext_column 'Products', 'ProductName', 'add'
6-Activar la tabla Con el procedimiento almacenado visto anteriormente sp_fulltext_Table activamos la tabla con la que estamos trabajando para poder llenarla.
sp_fulltext_Table 'Products', 'Activate'
7-Llenar el catlogo Y un ltimo paso es rellenar el catlogo que tenemos con los datos de la tabla que participa de la indizacin. El procedimiento almacenado que lo hace por nosotros es sp_fulltext_catalog que ya comentamos anteriormente. Se puede utilizar para rellenar un catlogo completamente o para iniciar un rellenado incremental.
En este ejemplo queremos realizar un llenado completo porque por ahora esta vaco.
sp_fulltext_catalog 'Ingredientes','start_full'
y por fin hemos acabado de crear el catlogo de texto y lo tenemos operativo. Ahora slo falta utilizarlo. 8-Comprobar que funciona Un ltimo paso es ejecutar una sentencia sencilla que utilice el catlogo recin creado para comprobar que funciona.
SELECT * FROM products WHERE CONTAINS(ProductName,'queso')
y esta sentencia nos devuelve todas las filas que contienen la palabra queso. 9-Modificar las tablas Insertemos un par de filas nuevas en la tabla productos.
INSERT INTO Products VALUES('Queso fresco de Burgos', 5, 4, '1 kg pkg', 12, 30, 0, 0, 0) INSERT INTO Products VALUES('Quesitos de la abuela', 5, 4, '8 porciones', 41, 10, 0, 0, 0)
Si ahora repetimos la bsqueda de antes veremos que este nuevo queso no aparece en los resultados. Hace falta reconstruir el catalogo de texto 10-Rellenar el catalogo de manera incremental Ejecutamos el mismo procedimiento almacenado que en el paso 7 pero ahora para rellenar el catlogo slo con las filas que han sido creadas desde entonces.
sp_fulltext_catalog 'Ingredientes', 'start_incremental'
para ver que ahora s obtenemos la fila insertada en el paso 9 Nuestro catlogo est creado y funcionando. Ahora hay que averiguar como le sacamos partido a estos catlogos de texto.
carcter coincidencias exactas o aproximadas con palabras o frases. CONTAINS puede buscar una palabra o una frase, el prefijo de una palabra, una palabra cerca de otra palabra, una palabra que sea una inflexin de otra, una palabra que tenga un peso especificado mayor que el de otra Como vemos es muy flexible. Vamos a ver su uso con un par de ejemplos que como siempre es la mejor manera. 1-Buscar todas las filas que contengan la palabra queso
SELECT * FROM products WHERE CONTAINS(ProductName,'queso')
Adems de estas hay otras formas un poco ms elaboradas de utilizar CONTAINS. Como siempre todo lo tenis en los BOL. Predicado FREETEXT Se utiliza para buscar en columnas de tipo carcter valores que coincidan con el significado de la condicin de bsqueda. Cuando se utiliza FREETEXT se separa la cadena buscada internamente en palabras que son trminos de bsqueda y se asigna a cada uno de los trminos un peso y se buscan las coincidencias. Supongamos que queremos comer chocolate y queso. Pues al argumento de FREETEXT puede ser algo como quiero comer chocolade con queso y nos dar las filas que contienen palabras de nuestra frase (usamos chocolade porque es as como est escrito en Northwind)
SELECT * FROM Products WHERE FREETEXT(ProductName, 'quiero comer chocolade con queso')
Y para terminar decir que todo esto lo podemos comprobar de manera grfica como decamos al principio en el Administrador Corporativo. Dentro de la base de datos Northwind hay una categora que es Catlogos de Texto y en ella est el catlogo Ingredientes que tiene indexada la tabla Productos. Como podis ver la utilizacin de catlogos de texto es una herramienta muy potente del SQL Server y puede ser de gran ayuda a la hora de realizar bsquedas. Una aplicacin directa podra ser un buscador en una Web http://sql.manivesa.com/Tutoriales+SQL/SQL+Server/207.aspx