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.
Como habilitarlo?
1. Primero debemos ver si el servicio del Full Text Search esta corriendo. Lo podemos ver en el SQL Server Configuration Manager
2. Luego verificamos si la base donde estamos trabajando es versión SQL Server 2008. Eso en las propiedades de dicha base.
3. Luego en la Tabla que deseamos indexar hacemos click derecho, Full-Text Index, Define Full-Text Index.
4. Seleccionamos la llave de la tabla, y luego las columnas que vamos a indexar. Nos pedirá que creemos un Catalogo y dejamos en automatico la alimentación del catalogo.
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.
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')
HOla Bernardo gracias por la info que nos brindas.
ResponderEliminarMi consulta es si se puede dividir toda una frase para realizar busquedas por palabras sin distinguir mayusculas y minusculas. Gracias y sigue adelante
Bien Explicado
ResponderEliminar