FULL TEXT SEARCH http://www.postgresql.org/docs/9.3/static/textsearch.html LI. Hugo Germán Cuéllar Martínez.

Slides:



Advertisements
Presentaciones similares
Búsqueda de una frase exacta
Advertisements

SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
integridad referencial
Rocío Contreras Águila Primer Semestre 2010
Al abrir el Access aparece una ventana para crear una base en blanco, con la ayuda de un asistente o abrir una existente. Al principio optamos por la primera.
Biblioteca.unizar.es Produce Base de datos Econlit Administra.
SQL Server Integration Services SSIS
¿QUÉ SON LAS BASES DE DATOS?
Mejoras a la Cláusula GROUP BY
Tutorial de búsqueda básica en CINAHL
Lenguaje de consulta de Hibernate
E.U. de Enfermería, Fisioterapia y Podología
Cómo consultar una base de datos o un catálogo en 5 minutos
Julio Pacheco SQL SERVER 2005 XML APRENDIENDO CON EJEMPLOS.
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Tema: Funciones en Excel (II) Funciones de Texto
Teoría de lenguajes y compiladores
Bases de Datos por: Zulma Santiago Irizarry 2011
Algebra Booleana y Compuertas Lógicas
El portal de recursos electrónicos de la UAM
Estrategias de Búsqueda
METODO DE ORDENAMIENTO POR SELECCIÓN.
SESIÓN 2. Completados por el tipo de objeto sobre el que actúan y el objeto concreto: CREATE DATABASE mibase ; Permite crear una base de datos llamada.
Support.ebsco.com Tutorial de Mi EBSCOhost Tutorial.
SQL Básico Prof. Nelliud D. Torres.
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
“Optimización de sentencias MySQL” jueves 26 de septiembre de 2013.
UNIDAD 2:Crear, abrir y cerrar una base de datos Hacer clic sobre la opción Nuevo de la pestaña Archivo. Se mostrarán las distintas opciones para nuevos.
Subconsultas Avanzadas
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar.
Tablas de Hash.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
Programación en Visual Basic Lección #8: SQL Por Antonio F. Huertas.
CONSULTAS SENCILLAS A LA BASE DE DATOS
ACCESS.
1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,

LENGUAJE SQL.
Bases de Datos Sql.
Structured Query Language (Lenguaje Estructurado de Consultas)
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Tecnologías para el Aprendizaje
MANUAL DE USO BASES DE DATOS Por: EBSCO Information Services
COLEGIO DE BACHILLERES “XOCHIMILCO TEPEPAN” Nº13  Tecnologías de la Información y comunicación 3.  Profa. Gabriela Pichardo Lazardo EQUIPO 25  Emmanuel.
LENGUAJE ESTRUCTURADO DE CONSULTAS
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
PRINCIPIOS DE PROGRAMACIÓN
Entorno de trabajo de Microsoft Word 2007
Tema 11 Bases de Datos y el Lenguaje SQL
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
BASE DE DATOS EDY GOMEZ C. Lic. En Informatica y Medios Audiovisuales
Support.ebsco.com Tutorial Holdings Management (Administración de Recursos)
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
Lic. Carla Aguirre Montalvo
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
MIA - Grupo 5 Unidad 2.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
ARREGLOS BIDIMENSIONALES MATRICES Son un espacio de almacenamiento continuo, que contiene una serie de elementos del mismo tipo de datos. Desde el punto.
Del menú desplegable Send To (enviar a) se pueden seleccionar las opciones de File (archivo), Collections (colecciones), Order (ordenar), Clipboard (portapapeles),
Sesión 3 Tablas, continuación. Creación de formularios. Creación de informes.
MEMORIA DINÁMICA.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DLM Transact SQL Sesión II Recuperación de información.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
DML Transact SQL Sesión VI Trabajando con subconsultas.
Selección Condicionada de Filas Uso de la cláusula WHERE La cláusula WHERE restringe las columnas que retorna una consulta según la condición que se imponga.
Transcripción de la presentación:

FULL TEXT SEARCH http://www.postgresql.org/docs/9.3/static/textsearch.html LI. Hugo Germán Cuéllar Martínez.

Búsqueda Clásica Los operadores de búsqueda han existido en las bases de datos por años PostgreSQL tiene ~, ~ *, como, y operadores ILIKE para tipos de datos textual, pero que carecen de muchas de las propiedades esenciales requeridos por los sistemas de información modernos Desventajas: No soportan el apoyo lingüístico incluso para ingles. No pueden manejar fácilmente derivados de palabras. No proporcionan un orden (ranking) de los resultados.

Full Text Search La búsqueda de texto completo ( o simplemente Búsqueda de texto) proporciona la capacidad de identificar el lenguaje natural que contenga una consulta y opcionalmente ordenarlos por relevancia. Pre procesa los índices de los documentos y este se guarda para una mayor rapidez, esto incluye: Convertir los documentos en tokens: identificar los diferentes tipos de tokens como son números, palabras, palabras complejas, direcciones de correo electrónico. Convertir los tokens en lexemas. Los lexemas son cadenas parecidas a los tokens pero estas son normalizadas por ejemplo quitar las mayúsculas, quitar los sufijos, eliminar las stop words. para esto postgreSQL usa diccionarios. Almacenar los documentos pre procesados para optimizar la consulta. Cada documento es representado por una matriz ordenada de lexemas y posiciones.

¿Qué es un documento? Es la unidad mínima de búsqueda. En Postgres, un documento es un campo en una fila de una tabla, o quizá una concatenación de varios campos, de una misma tabla o de más de una con un join. SELECT f.title || ' ' || f.description || ' ' || f.year FROM film f WHERE f.film_id > 3;

¿Qué es un documento? Al combinar campos suele ser conveniente usar la función coalesce para convertir los valores NULL en ”, de otro modo si un campo es nulo, el documento entero será nulo, por la propiedad de que tiene el valor NULL de que genera NULL al participar en cualquier expresión. SELECT coalesce(f.title,'') || ' ' || coalesce(f.description,'') || ' ' || coalesce(f.year,'') AS document FROM film f WHERE f.film_id > 3;

¿Qué es un tsvector? Es un tipo de datos de Postgres, que consiste en una lista de palabras extraídas de un documento. Las palabras están normalizadas, es decir, se eliminan las palabras “stopwords” (artículos, conjunciones, etc.) y los signos de puntuación, y el resto de palabras se reducen a su lexema básico. Finalmente se añade a cada palabra en qué posición o posiciones del documento aparece. SELECT ‘A fat cat - sat on a mat and ate a fat rat'::tsvector; tsvector ----------------------------------------------------- '-' 'A' 'a' 'and' 'ate' 'cat' 'fat' 'mat' 'on' 'rat' 'sat' SELECT to_tsvector('english', ‘A fat cat - sat on a mat and ate a fat rat'); to_tsvector; ----------------------------------------------------- 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4

Categorizar (int, Word, hword, asciiword, etc) Tokens ¿Qué es un tsvector? Texto Categorizar (int, Word, hword, asciiword, etc) Tokens Busca en diccionario lexema

¿Qué es un tsquery? Es un tipo de datos que nos brinda herramientas adicionales para consultar el vector de búsqueda de texto completo. Operadores & (and), | (or) y ! (not), y paréntesis (). También existe una función to_tsquery para convertir un string en un tsquery SELECT ‘rat & cat'::tsquery; tsquery --------------------------- 'rat' & 'cat' SELECT to_tsquery('english', 'Fat & (Rat | Cat)'); to_tsquery --------------------------- 'fat' & ( 'rat' | 'cat' ) SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat’

Poniendo pesos a las columnas La función setweight se puede utilizar para etiquetar las entradas de un tsvector con un peso dado, donde un peso es una de las letras A, B, C, o D. UPDATE film SET fulltext = setweight(to_tsvector(coalesce(title,'')), 'A') || setweight(to_tsvector(coalesce(description,'')), 'B');

' Operadores El FTS en PostgreSQL está basada en el operador @@, el cual retorna true si un tsvector (documento) coincide con una tsquery (consulta). No importa el orden en el que se pongan: SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat’

Ranking de Resultados (Ranking) ' Ranking de Resultados (Ranking) Hay dos funciones predefinidas (ts_rank y ts_rank_cd) que calculan la relevancia de un documento respecto de un tsquery, en función del número de veces que se encuentra cada término de búsqueda, la posición dentro del documento, etc. SELECT description, ts_rank_cd(fulltext, query) AS rank FROM film, to_tsquery(‘english’,'Panorama') query WHERE fulltext @@ query ORDER BY rank DESC LIMIT 10; SELECT description, ts_rank(fulltext, query) AS rank FROM film, to_tsquery(‘english’,'Panorama') query WHERE fulltext @@ query ORDER BY rank DESC LIMIT 10; Esta función calcula el ranking cover density, como se describe en el artículo "Relevance Ranking for One to Three Term Queries" en la revista "Information Processing and Management", 1999. Basado en la frecuencia de aparicion de sus lexemas.

Ranking de Resultados (Ranking) ' Ranking de Resultados (Ranking) Los ranking por default son {D-weight, C-weight, B-weight, A-weight} {0.1, 0.2, 0.4, 1.0} SELECT description, ts_rank(array[0.1,0.3,0.9,1.0],fulltext, query) AS rank FROM film, to_tsquery(‘english’,'Panorama') query WHERE fulltext @@ query ORDER BY rank DESC LIMIT 10;

Resaltar Resultados (Highlight) ' Resaltar Resultados (Highlight) La siguiente cosa interesante que podemos hacer con los resultados de nuestro texto completo es poner de relieve las palabras relevantes. PostgreSQL nos ofrece la función: ts_headline(). SELECT title, ts_headline(‘english’, description, query) AS description FROM film, to_tsquery(‘english’,'Panorama‘) query WHERE fulltext @@ query ORDER BY title ASC LIMIT 10; SELECT title, ts_headline(‘english’, description, query, 'StartSel = <<<, StopSel = >>>') AS description FROM film, to_tsquery(‘english’,'Panorama‘) query WHERE fulltext @@ query ORDER BY title ASC LIMIT 10;

' Índices Hay dos tipos de índices que nos ayudaran a mejorar el rendimiento. GIST (Generalized Search Tree) El GiST sí no es algo que es único a PostgreSQL, es un proyecto en sí mismo y su concepto se presenta en una biblioteca de C llamada libGist. Siempre devolverá un no si no hay coincidencia o un tal vez si hay. Debido a este comportamiento PostgreSQL tiene que ir y comprobar manualmente todos los tal vez 's y verificar que si coincidan. Las grandes ventajas son el hecho de que el índice se crea más rápido y la actualización de un índice es menos costosa. GIN (Generalized Inverted Index) Es un índice determinista, devolverá verdadero si hay coincidencias. No almacena pesos en los lexemas. Entre mas grande se vuelva el índice mas lento será su actualización.

¿Qué índice debo usar, GIST o GIN? ' ¿Qué índice debo usar, GIST o GIN? Los índices GIST usan un hash de longitud fija, que es bastante eficiente en espacio. Pero puede ocurrir que varios documentos generen el mismo hash, por lo que en una búsqueda aparecerán ambos cuando quizá sólo se esté buscando uno de ellos. Estos índices son buenos cuando los documentos no tienen muchas palabras (por debajo de 10.000). Es útil además definir una buena configuración que elimine todas las palabras posibles y normalice mucho. Los GIN en cambio, no tienen estas limitaciones, pero ocupan bastante más espacio, y son más lentos de actualizar, aunque son más rápidos de leer. La regla general suele ser usar GIN si los datos cambian poco o si hay muchas palabras distintas, y GIST para datos muy dinámicos pero sin demasiadas palabras, o si el espacio es muy importante.

Índices CREATE INDEX films_idx ON phraseTable USING gin(fulltext); ' Índices CREATE INDEX films_idx ON phraseTable USING gin(fulltext); CREATE INDEX films_idx ON phraseTable USING gist(fulltext);

Consideraciones en RUA. ' Consideraciones en RUA. El diccionario Español que tiene por default PostgreSQL tiene problemas con los acentos en palabras agudas. SELECT to_tsquery(‘spanish', ‘Descripcion'); SELECT to_tsquery(‘spanish', ‘Descripción');

Solución Ocupar la extensión unaccent. ' Solución Ocupar la extensión unaccent. Es un diccionario de búsqueda de texto que elimina acentos (signos diacríticos) de los lexemas. Es un diccionario de filtrado, lo que significa su salida siempre pasa al siguiente diccionario (si existe), a diferencia del comportamiento normal de los diccionarios. Creamos la extensión para usarla en nuestra base de datos Creamos y configuramos la configuración de búsqueda. SELECT * FROM pg_available_extensions; (extensiones disponibles) SELECT * FROM pg_extension; (extensiones habilitadas) CREATE EXTENSION unaccent; CREATE TEXT SEARCH CONFIGURATION RUAMX ( COPY = spanish ); ALTER TEXT SEARCH CONFIGURATION RUAMX ALTER MAPPING FOR hword, hword_part, word WITH unaccent, spanish_stem;

Solución Crear un lenguaje. Ocupar la extensión unaccent. ' Solución Crear un lenguaje. Ocupar la extensión unaccent. Es un diccionario de búsqueda de texto que elimina acentos (signos diacríticos) de los lexemas. Es un diccionario de filtrado, lo que significa su salida siempre pasa al siguiente diccionario (si existe), a diferencia del comportamiento normal de los diccionarios. Creamos la extensión para usarla en nuestra base de datos select * from pg_available_extensions; (extensiones disponibles) select * from pg_extension; (extensiones habilitadas) CREATE EXTENSION unaccent;

Configuraciones de búsqueda de texto ' Configuraciones de búsqueda de texto \dF listado de configuraciones de búsqueda de texto. \dFd diccionarios \dfp analizadores \dFt plantillas Con el argumento mas (+) se muestra mayor detalle de los listados

Gracias. http://www.postgresql.org/docs/9.3/static/textsearch.html LI. Hugo Germán Cuéllar Martínez. hugo.Cuellar@comunidad.unam.mx