1. Búsqueda de texto completo -- Grupo 04
Tutorial Búsqueda de texto completo en
SQL Server
Esp. 364918 - ADMINISTRACIÓN DE BASES DE DATOS
JAIRO ARAMÉNDIZ PINZÓN
JAIR OSPINO ARDILA
OSNEIDER PALLARES PÉREZ
Valledupar
2012
2. Búsqueda de texto completo -- Grupo 04
Full Text Search
Full Text Search es una funcionalidad de búsqueda que habilita la manera más
rápida y sencilla para la búsqueda de texto dentro de SQL server (Crea un
diccionario de palabras). Aunque el concepto de full text search no es nuevo en
SQL Server 2008, hay mejoras considerables de gestión y rendimiento en SQL
Server 2008.
Tanto en SQL Server 2000 como en 2005 uno de los inconvenientes que tenemos
cuando utilizamos full-text search es que éste sistema no se encuentra integrado
con el optimizador de consultas. Dicho de otra forma, una consulta que incluya
parte relacional pura y parte full-text debe descomponerse en dos consultas
independientes y luego operar con los resultados. Esto provoca ineficiencias que
en algunos casos se solucionaban de forma artificial (por ejemplo incluyendo
columnas relacionado en el texto a indexar).
En SQL Server 2008 el motor se encuentra integrado y los índices full-text pasan a
ser índices especializados (como los de los tipos de datos geográficos) pero que
siguen estando dentro del motor relaciona. Además se ha optimizado el motor
para máquinas con más procesadores y mayores cantidades de memoria
intentando así obtener mejores rendimientos en las omnipresentes plataformas de
64 bits.
¿Cómo habilitarlo?
1. Primero debemos ver si el servicio del Full Text Search está corriendo. Lo
podemos ver en el SQL Server Configuration Manager
Como podemos observar en nuestro caso está detenido, lo que debemos hacer es
iniciarlo, para eso lo que hacemos es dar clic sobre el e iniciarlo dando clic en el
botón run o iniciar.
3. Búsqueda de texto completo -- Grupo 04
En el caso de que este deshabilitada la opción de iniciar, como en nuestro caso lo que se
debe hacer es ir directamente a los servicios del sistema e iniciarlo.
4. Búsqueda de texto completo -- Grupo 04
Lo que debemos hacer es colocar el tipo de inicio como manual e iniciarlo nosotros
mismos.
5. Búsqueda de texto completo -- Grupo 04
Ahora ya esta iniciado nuestro servicio de full-text
2. Luego verificamos si la base donde estamos trabajando es versión SQL Server
2008. Para ello ejecutamos el siguiente comando como lo indica la siguiente
figura.
6. Búsqueda de texto completo -- Grupo 04
3. Luego en la Tabla que deseamos indexar hacemos click derecho, Full-Text
Index, Define Full-Text Index.
7. Búsqueda de texto completo -- Grupo 04
4. Seleccionamos la llave de la tabla, y luego las columnas que vamos a
indexar. Nos pedirá que creemos un Catalogo y dejamos en automático la
alimentación del catalogo.
Al seleccionar Define full-text se nos abre la siguiente ventana en la cual daremos
siguiente.
8. Búsqueda de texto completo -- Grupo 04
Luego seleccionamos las columnas en las que deseamos aplicarle la consulta de texto
completo y damos siguiente.
Y como hemos dicho, dejamos la alimentación de manera automática.
9. Búsqueda de texto completo -- Grupo 04
Lo que sigue ahora es crear el catalogo donde referenciará los diferentes índices que se
creen. En caso de tener ya creado más catálogos si lo deseamos solamente escogemos
uno de ellos, en nuestro caso no hay, lo crearemos.
Esta configuración es opcional, lo que requiere es que, como y cuando deseamos que se
utilice los índices.
10. Búsqueda de texto completo -- Grupo 04
Una vez ya realizado la configuración podemos ver lo que hasta ahora hemos indicado.
Al dar finalizar y si todo sale bien hemos creado correctamente nuestro catálogo y nuestro
índice.
11. Búsqueda de texto completo -- Grupo 04
CONTAINS
Se utiliza para buscar, coincidencias exactas o aproximadas con palabras o
frases, palabras próximas a otra dada en una cierta distancia, o coincidencias
ponderadas.
CONTAINS puede buscar:
Una palabra o una frase.
El prefijo de una palabra o una frase.
Una palabra cerca de otra palabra.
Una palabra que sea derivada de otra (por ejemplo, las palabras controles,
controladores, controlando y controlado son derivadas de control).
Una palabra que sea un sinónimo de otra palabra usando el diccionario de
sinónimos (por ejemplo, la palabra metal puede tener sinónimos como
aluminio y acero).
INFLECTIONAL
Especifica que se va a utilizar el analizador lingüístico dependiente del idioma en
el término simple especificado. El comportamiento del analizador lingüístico se
define en función de las reglas de análisis lingüístico de cada idioma concreto. El
idioma neutro no tiene ningún analizador lingüístico asociado. El idioma de las
columnas que se van a consultar se utiliza para hacer referencia al analizador
lingüístico deseado. Si se especifica idioma, se utiliza el analizador lingüístico
correspondiente a dicho idioma.
THESAURUS
Especifica que se utiliza el diccionario de sinónimos correspondiente al idioma de
texto de la columna o el idioma especificado en la consulta. El patrón o patrones
más largos de termino_simple se hacen coincidir con el diccionario de sinónimos y
se generan términos adicionales para expandir o reemplazar el patrón original.
NEAR
Indica que la palabra o frase situada a la izquierda del operador NEAR o ~ tiene
que estar bastante cerca de la palabra o frase situada a la derecha del operador
NEAR o ~. Se pueden encadenar varios términos de proximidad.
Próximo especifica una coincidencia de palabras o frases que deben estar
próximas entre sí. Funciona de forma similar al operador AND: ambos requieren
que existan varias palabras o frases en la columna examinada.
12. Búsqueda de texto completo -- Grupo 04
Ejemplos:
SELECT * FROM Quijote WHERE CONTAINS(contenido, 'caballero')
SELECT * FROM Quijote WHERE CONTAINS(contenido,'caballero NEAR
rocinante')
SELECT * FROM Quijote WHERE CONTAINS(contenido,'caballero NEAR disco')
SELECT * FROM Quijote WHERE CONTAINS(contenido, 'FORMSOF
(INFLECTIONAL , doctor)')
SELECT * FROM Quijote WHERE CONTAINS(contenido, 'FORMSOF
(THESAURUS , golpe )')
SELECT * FROM Quijote WHERE CONTAINS (contenido,'"un lugar" AND
"rocinante"');
SELECT * FROM Quijote WHERE CONTAINS (contenido,'"un lugar" AND
"computadora"');
SELECT * FROM Quijote WHERE CONTAINS (contenido,'"un lugar" OR
"computadora"');
SELECT * FROM CONTAINSTABLE( TABLA, CAMPO, 'PALABRA')
FREETEXT
Es un predicado que se utiliza para buscar en columnas que contengan tipos de
datos basados en caracteres valores que coincidan con el significado y no
literalmente con las palabras de la condición de búsqueda. Cuando se utiliza
FREETEXT, el motor de consulta de texto realiza internamente las siguientes
acciones en freetext_string, asigna a cada uno de los términos un peso y busca
las coincidencias.
Las consultas de búsqueda de texto que utilizan FREETEXT son menos precisas
que las consultas de texto que utilizan CONTAINS. El motor de búsqueda de texto
de SQL Server identifica las palabras y las frases importantes. No se le da
significado especial a ninguna de las palabras clave reservadas o caracteres
comodín que suelen tener significado cuando se especifican en el parámetro del
predicado CONTAINS.
SELECT *FROM Quijote q WHERE FREETEXT(Contenido, 'encontro a su
dulcinea')
SELECT * FROM FREETEXTTABLE(TABLA, CAMPO, 'PALABRA')