Desarrollo de motores de búsqueda utilizando herramientas open source - José Manuel Ortega Candel - E-Book

Desarrollo de motores de búsqueda utilizando herramientas open source E-Book

José Manuel Ortega Candel

0,0

Beschreibung

El desarrollo de motores de búsqueda ha crecido en los últimos años gracias al uso de herramientas y frameworks open source, pues facilitan una base sobre la cual realizar nuestras aplicaciones orientadas a la extracción y búsqueda de diferentes fuentes de datos. Si desea adquirir los conocimientos necesarios para dominar las principales herramientas open source, las librerías y los frameworks, ha llegado al libro indicado. Este manual le proporciona, desde un enfoque teórico-práctico, todos los conceptos e instrucciones que le permitirán construir desde cero motores de búsqueda utilizando los lenguajes de programación Java y Python. Gracias a los contenidos del libro: o Conocerá la estructura y naturaleza de un motor de búsqueda, así como la importancia de los sistemas de búsqueda y recuperación de la información. o Aprenderá los principales motores de búsqueda open source y su funcionamiento interno. o Dominará las diferentes herramientas para desarrollar motores de búsqueda utilizando frameworks de desarrollo dentro de los ecosistemas de programación Java y Python. Además, con el objetivo de obtener el máximo provecho de las herramientas y facilitar el seguimiento de las prácticas del libro, en la primera página se proporciona el acceso al repositorio con el código de los ejemplos desarrollados. Hágase con el libro y descubra las principales herramientas que todo desarrollador e ingeniero de software debe dominar para desarrollar sus propios motores de búsqueda.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 330

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



DESARROLLO DE MOTORES DE BÚSQUEDAUTILIZANDO HERRAMIENTAS OPEN SOURCE

Análisis y desarrollo con Apache Lucene, Solr y ElasticSearch

José Manuel Ortega Candel

DESARROLLO DE MOTORES DE BÚSQUEDAUTILIZANDO HERRAMIENTAS OPEN SOURCE

Análisis y desarrollo con Apache Lucene, Solr y ElasticSearch

José Manuel Ortega Candel

Desarrollo de motores de búsqueda utilizando herramientas open source

© 2021 José Manuel Ortega Candel

Primera edición, 2021

© 2021 MARCOMBO, S. L.

www.marcombo.com

Diseño de cubierta: ENEDENÚ DISEÑO GRÁFICO

Maquetación: D. Márquez

Corrección: Nuria Barroso y Anna Alberola

Directora de producción: M.a Rosa CastilloProducción del ePub: booqlab

«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».

ISBN: 978-84-267-3336-8

Este libro va dedicado a aquellos que me han seguido, me siguen y me seguirán, no importa cuál sea el camino escogido,en algún lugar nos encontraremos.

ÍNDICE

INTRODUCCIÓN

CAPÍTULO 1

INTRODUCCIÓN A LOS MOTORES DE BÚSQUEDA

1.1 Definición de motores de búsqueda

1.2 ¿Por qué necesito un motor de búsqueda?

1.2.1 Extracción de texto en documentos

1.2.2 Operaciones de lectura

1.2.3 Esquema flexible

1.3 Funcionamiento de un motor de búsqueda

1.3.1 Buscadores de directorios

1.3.2 Buscadores jerárquicos

1.3.3 Spiders (arañas o crawlers)

1.4 Proceso de indexación

1.4.1 Rendimiento en la indexación de documentos

1.4.2 Stopwords

1.4.3 Steamming

1.5 Recuperación de la información

1.5.1 Extracción de información

1.5.2 Sistema de búsqueda/respuesta

1.6 Motores de búsqueda e indexadores

1.6.1 Lucene

1.6.2 Índice invertido

1.6.3 Apache Solr

1.6.4 ElasticSearch

1.6.5 Otros motores de búsqueda

1.7 Herramientas de procesamiento de lenguaje natural (PLN)

CAPÍTULO 2

APACHE LUCENE

2.1 Introducción a Apache Lucene

2.2 Módulos y funcionalidades de Apache Lucene

2.3 Arquitectura de Apache Lucene

2.3.1 Proceso de tokenización y búsqueda en Apache Lucene

2.4 Trabajar con Apache Lucene

2.4.1 Configuración del entorno

2.4.2 Crear un índice

2.4.3 Crear y escribir documentos en un índice

2.5 Realizar búsquedas en Apache Lucene

2.5.1 Obtención de un IndexSearcher

2.5.2 Proceso de búsqueda con IndexSearcher

2.5.3 Crear consultas con Lucene QueryParser

2.5.4 Sintaxis de las consultas en Apache Lucene

2.6 Búsqueda de información con Apache Lucene

2.7 Búsqueda en múltiples índices de Lucene

2.8 Herramientas de administración de Lucene

2.9 Herramientas de búsqueda que usan Apache Lucene

2.9.1 Krugle

2.9.2 Google Dataset Search

2.9.3 Otros repositorios y portales

CAPÍTULO 3

APACHE SOLR

3.1 Introducción a Apache Solr

3.2 Arquitectura de Apache Solr

3.3 Indexación e índice invertido en Apache Solr

3.3.1 Relevancia y filtro en las búsquedas

3.4 Instalación de Solr

3.5 Configurar Apache Solr

3.5.1 Ficheros de configuración y esquema

3.5.2 Proceso de indexación

3.5.3 Indexación de datos con SimplePostTool

3.5.4 Esquema administrado en Apache Solr

3.5.5 Añadir información al índice

3.6 Búsqueda de documentos

3.6.1 Usar la API REST

3.6.2 Consultas básicas de Solr

3.6.3 Componente stats (estadísticas)

3.7 Consultas avanzadas de Solr

3.7.1 Paginación y clasificación

3.7.2 Navegación facetada en Solr

3.7.3 Búsqueda de facetas en Solr

3.8 Componentes de una petición en Solr

3.8.1 Controladores Request Handler

3.9 Analizadores en Apache Solr

3.9.1 Definir campos personalizados

3.9.2 Configuración de los tipos de campos

3.9.3 Propiedad score

3.10 Monitorización del rendimiento de Apache Solr

3.10.1 Página de plugins/estadísticas de Apache Solr

3.11 Ejecución en modo Cloud

3.11.1 Terminología usada en SolrCloud

3.11.2 SolrCloud

3.11.3 Ejecutar SolrCloud

3.11.4 Indexación distribuida

3.11.5 Ventajas de SolrCloud

3.12 Arrancar Apache Solr desde Docker

3.13 Interactuar con Solr desde Java

3.13.1 Añadir Solrj a un proyecto Maven

3.13.2 Conexión con el servidor Solr desde Java

3.14 Crawling con Apache Nutch y conexión con Apache Solr

3.15 Conclusiones de Apache Solr

CAPÍTULO 4

ELASTICSEARCH

4.1 Introducción a ElasticSearch

4.1.1 Ventajas de ElasticSearch sobre Apache Solr

4.2 Uso de ElasticSearch para proyectos de Big Data

4.3 Arquitectura de ElasticSearch

4.3.1 Nodos en ElasticSearch

4.4 ElasticSearch como solución distribuida

4.5 Fragmentos y réplicas en ElasticSearch

4.6 Instalación de ElasticSearch

4.7 Crear un índice en ElasticSearch

4.8 API REST de ElasticSearch

4.8.1 Mapping o estructura de los datos del índice

4.8.2 Recuperar parte de un documento

4.8.3 Asignar un mapeo a un índice

4.8.4 Query DSL (solicitudes DSL)

4.8.5 Búsquedas en ElasticSearch

4.8.6 La consulta multi_match

4.8.7 Navegación facetada en ElasticSearch

4.8.8 Agregaciones en documentos

4.8.9 Autocompletado en ElasticSearch

4.8.10 Analizadores en ElasticSearch

4.9 Relevancia de documentos en ElasticSearch

4.9.1 Puntuación y relevancia de los documentos

4.9.2 Mejorar la relevancia de los resultados de búsqueda

4.10 Estadísticas e información sobre el clúster, índices y nodos

4.10.1 Estado del clúster

4.10.2 Métricas del clúster

4.10.3 Estadísticas de los índices

4.11 Herramientas de monitorización en ElasticSearch

4.11.1 ElasticSearch Head

4.11.2 ElasticSearch query client

4.11.3 Cerebro

CAPÍTULO 5

CLIENTES ELASTICSEARCH

5.1 Clientes de conexión en Java

5.2 Conexión al clúster de ElasticSearch

5.3 Gestionar índices

5.4 Indexación de documentos en el índice

5.5 Búsqueda de documentos en el índice

5.6 Integración con Spring Data

5.7 Seguridad en ElasticSearch

5.8 Conclusiones de ElasticSearch

CAPÍTULO 6

VISUALIZACIÓN DE DATOS CON KIBANA

6.1 Introducción a Kibana

6.2 Stack ELK

6.2.1 Principales usos de ELK

6.2.2 Stack ELK en contenedores Docker

6.3 Instalación de Kibana

6.4 LogStash

6.4.1 Instalación de LogStash

6.4.2 Configuración de LogStash

6.4.3 Otros servicios de Elastic

6.5 Monitorización de LogStash desde Kibana

6.6 Seguridad en Kibana

CAPÍTULO 7

MOTORES DE BÚSQUEDA CON PYTHON

7.1 Conectando con Solr desde Python

7.2 Integración de ElasticSearch con Python

7.2.1 Crear un índice e insertar documentos usando Python

7.2.2 Realizar búsquedas usando Python

7.3 Consultar ElasticSearch a través de la API REST en Python

7.4 Optimizar un índice en ElasticSearch

7.5 Indexar documentación de Django

7.6 Whoosh como motor de búsqueda en Python

7.6.1 Whoosh schema

7.6.2 Realizar búsquedas en Whoosh y scoring

7.7 Django-haystack

7.7.1 Integrar haystack en una aplicación Django

CAPÍTULO 8

GLOSARIO DE TÉRMINOS

INTRODUCCIÓN

Este libro está especialmente pensado para perfiles con conocimientos previos en programación orientada a objetos, principalmente con los lenguajes de programación Java y Python. Va dirigido a aquellos perfiles con habilidades de programación que necesiten trabajar con motores de búsqueda open source y a quienes precisen llevar a cabo tareas orientadas a la extracción, procesamiento y manipulación de grandes volúmenes de datos no estructurados.

Analizaremos los principales motores de búsqueda de código abierto, como Apache Lucene, Solr y ElasticSearch. Este último es uno de los motores de búsqueda open source para Big Data con mayor crecimiento en la industria. Se caracteriza por sus grandes capacidades de flexibilidad, velocidad, escalado y herramientas de soporte asociadas, y recorre todo el ciclo de trabajo desde la construcción de los procesos de extracción e incorporación de datos hasta el trabajo de análisis y monitorización mediante herramientas de búsqueda y visualización en tiempo real con herramientas como Kibana.

A lo largo del libro, el lector encontrará ejemplos de código fuente en los lenguajes de programación Java y Python. Los scripts y proyectos implementados se pueden encontrar en el repositorio de GitHub:

https://github.com/Marcombo/motores_busqueda_open_source

A partir del capítulo 2, se recomienda al lector seguir los ejemplos prácticos del libro junto con el código fuente que se puede encontrar en el repositorio de GitHub, con el objetivo de practicar los conceptos que se analizan de forma teórica. En dicho repositorio también hallará instrucciones de instalación del entorno y de las principales herramientas a nivel de desarrollo que se utilizan a lo largo del libro.

Capítulo 1

INTRODUCCIÓN A LOS MOTORES DE BÚSQUEDA

En la actualidad, el empleo de motores de búsqueda se ha extendido de forma generalizada. Esto se debe principalmente a la proliferación de sitios web, a la evolución de los sistemas y a las necesidades de compartir documentos y realizar búsquedas en un mundo globalizado y digitalmente conectado. Cabe destacar que los motores de búsqueda se encuentran muy de moda en la actualidad, no solamente por su gran éxito en la red y por su capacidad para indexar documentos, sino también por su utilización en el mundo de las redes sociales y en las modernas técnicas y herramientas de Big Data.

Los motores de búsqueda solucionan la mayoría de los problemas que se presentan a la hora de realizar una búsqueda con una cantidad elevada de datos, y permiten obtener resultados relevantes para el usuario mediante algoritmos de ordenación.

En la actualidad, cuando se habla de motor de búsqueda, se tiende a pensar en la consulta web. En general, el impacto que ha supuesto la creación de Internet, junto con la necesidad de los usuarios de compartir información, ha llevado a la inevitable búsqueda de herramientas que faciliten el proceso de clasificación de documentos conforme a las necesidades del usuario. Además, la creciente cantidad de datos que encontramos en Internet necesita ser estructurada y clasificada de algún modo que permita su interpretación. En esencia, esta es la misión de un motor de búsqueda: permitir a los usuarios acceder, a través de un conjunto de palabras clave, a la información que desean, intentando presentar en primer término los datos más relevantes para el usuario.

Sin embargo, los motores de búsqueda no se emplean únicamente en Internet. Aunque ese fuera el origen de su nacimiento, en la actualidad se han convertido en poderosas herramientas para aportar soluciones de negocio (por ejemplo, para búsquedas internas en la documentación de las empresas, o para situaciones que requieran localizar información dentro de un gran volumen de datos).

De esta manera, los motores de búsqueda se han convertido en algo intrínseco en nuestro día a día. Es por ello que realizar un estudio analizando las semejanzas y diferencias entre diferentes motores de búsqueda puede resultar muy interesante.

Entre los principales objetivos de este capítulo podemos destacar:

• Comprender la estructura y naturaleza de un motor de búsqueda y la importancia de los sistemas de búsqueda y recuperación de la información para su implementación.

• Conocer las necesidades típicas que se resuelven mediante motores de búsqueda.

• Conocer los principales motores de búsqueda que podemos encontrar en el mercado.

1.1 DEFINICIÓN DE MOTORES DE BÚSQUEDA

En la actualidad, para agilizar el tiempo de respuesta en el proceso de búsqueda, se hace uso de motores de búsqueda que suelen utilizar palabras clave y metadatos que provienen de las mismas páginas para, de esta forma, obtener un vocabulario y mejorar la búsqueda en el sitio.

Los motores de búsqueda han recorrido un largo camino desde sus primeros prototipos, y su desarrollo ha llevado a la investigación de múltiples tecnologías de búsqueda, que se desarrollaron a partir de diferentes motores. Alta Vista fue el primer motor de búsqueda para procesar las consultas en lenguaje natural; y Lycos fue uno de los primeros motores de búsqueda en implementar un sistema de categorización a partir de la relevancia de las palabras, teniendo en cuenta los prefijos en palabras clave y la proximidad de las palabras encontradas.

Un motor de búsqueda es un software o una secuencia de comandos que busca en documentos o en bases de datos las palabras clave y devuelve los resultados de todos los archivos que contengan esas palabras. Hoy en día, existen muchos motores de búsqueda diferentes disponibles en Internet, cada uno con sus propias habilidades y características. El primer motor de búsqueda desarrollado fue Archie (https://es.wikipedia.org/wiki/Archie_(Buscador_FTP)), que fue utilizado para buscar archivos de forma similar al protocolo FTP. Hoy en día, el motor de búsqueda más popular es Google.

Al final, un motor de búsqueda como Google es un buscador jerárquico que va recorriendo páginas y recopilando información sobre su contenido. En el momento de realizar una consulta mediante frases o palabras clave, el motor de búsqueda reúne información de su base de datos y la muestra al usuario según la relevancia que cada motor pueda definir. Como resultado final, devuelve al usuario los resultados en un listado de páginas que contienen las palabras de la consulta realizada.

1.2 ¿POR QUÉ NECESITO UN MOTOR DE BÚSQUEDA?

En primer lugar, sería interesante analizar las preguntas que deberíamos responder sobre sus datos y los casos de uso para decidir si un motor de búsqueda sería lo más adecuado para el problema que trata de resolver. Al final, se trata de entender los datos y los usuarios y elegir una tecnología que funcione para ambos.

Una característica distintiva de las arquitecturas de aplicaciones modernas es hacer coincidir el motor de almacenamiento y procesamiento con los datos. Si es un programador, debe seleccionar la mejor estructura de datos en función de cómo se utilizarán los datos en un algoritmo. El mismo principio se aplica con los motores de búsqueda.

Los motores de búsqueda están optimizados para manejar datos que tienen las siguientes características:

• Extracción de texto en documentos

• Operaciones de lectura

• Orientación a documentos

• Esquema de documentos flexible a los cambios

Una posible quinta característica es la de tener un gran volumen de datos para tratar, es decir, Big Data. Pero sería interesante estudiar lo que hace que un motor de búsqueda sea especial para manejar grandes volúmenes de datos. Por ahora, nos centraremos en los conceptos de alto nivel.

1.2.1 Extracción de texto en documentos

Esta característica hace referencia a que un motor de búsqueda está específicamente diseñado para extraer la estructura implícita del texto a partir de la información que almacena en los índices. Los datos centrados en el texto implican que el texto de un documento contiene información que los usuarios están interesados en encontrar. Por supuesto, un motor de búsqueda también admite datos sin texto, como fechas y números, pero su principal ventaja reside en su capacidad de manejar textos basados en lenguaje natural.

1.2.2 Operaciones de lectura

Otro aspecto clave es que los motores de búsqueda manejan de manera efectiva la información en modo lectura y, por lo tanto, están optimizados para acceder con eficiencia a la información de los índices. Esto significa que las operaciones de lectura son más óptimas si las comparamos con operaciones de creación o actualización. Esto no quiere decir que no se puedan escribir grandes cantidades de datos o que existan límites sobre la frecuencia con la que se pueden escribir otros nuevos. De hecho, una de las características clave de los motores de búsqueda es la capacidad que tienen, casi en tiempo real, de indexar miles de documentos por segundo y hacer que se puedan buscar casi de inmediato.

El punto más importante es que cuando escribe datos en los índices de un motor de búsqueda, estos datos están destinados a ser leídos en algún momento y releídos muchas veces a lo largo de su vida útil. Piense en un motor de búsqueda como en una herramienta optimizada para ejecutar consultas, en lugar de almacenar datos. Además, si las operaciones de actualización van a ser más frecuentes que las operaciones de lectura, esto podría ser un indicador de que un motor de búsqueda podría no ser la mejor solución para sus necesidades. Existen otras tecnologías NoSQL, como MongoDB o Cassandra, que podrían ser mejores opciones si necesitara escrituras aleatorias rápidas de los datos existentes.

1.2.3 Esquema flexible

La última característica destacada de los motores de búsqueda es que tienen un esquema flexible. Esto significa que los documentos, en un índice de búsqueda, no necesitan una estructura uniforme. En una base de datos relacional, cada fila de una tabla tiene la misma estructura.

La mayoría de los motores de búsqueda se basan en que los documentos pueden tener diferentes campos y no hay una estructura fija. Piense, por ejemplo, en bases de datos NoSQL orientadas a documentos como Mongo-DB o CouchDB.

El beneficio de disponer de una variedad de opciones para almacenar y procesar datos es que no tiene que encontrar una tecnología única para todos. En la mayoría de los casos, podrá complementar el uso de motores de búsqueda tanto con bases de datos relacionales como con bases de datos NoSQL.

1.3 FUNCIONAMIENTO DE UN MOTOR DE BÚSQUEDA

Un motor de búsqueda es un programa que permite localizar en un conjunto de documentos aquellos relacionados con una palabra o palabras clave seleccionadas. Para ofrecer esta funcionalidad, se exploran los ficheros existentes en el sistema de forma eficiente, registrando información relevante sobre ellos en una base de datos. Esta base de datos es empleada por el motor para permitir a los usuarios realizar consultas y localizar esos documentos de forma más sencilla.

Así pues, para conseguir esta funcionalidad, existen varios componentes principales que permiten al motor de búsqueda realizar estas operaciones:

• Crawler o Spider: así se denomina el proceso que recorre el conjunto de documentos almacenados, ya sea en una máquina o en una red, que recoge los metadatos y la ubicación de los mismos para, posteriormente, guardar un registro de todos ellos y permitir su rápida localización y presentación al usuario. En colecciones de documentos reducidas, esta operación no le supone una gran cargabilidad al proceso. Sin embargo, en entornos como Internet, se precisa de un proceso que esté de forma continuada verificando los enlaces que forman una web, dado que la situación de los elementos es más dinámica y varía con el tiempo.

• Índice: el índice se puede describir como el conjunto de información recopilada por el crawler y que se almacena en un registro; se denomina índice de búsqueda. Estos datos son los que emplea posteriormente el motor para escoger los elementos que cumplen con la petición del usuario a través de las palabras clave que conforman la consulta.

• Algoritmo de ordenación: si el índice es el corazón del motor de búsqueda, el algoritmo de ordenación es el cerebro, ya que es el responsable de recoger los datos del índice de la forma más adecuada posible, devolviendo al usuario los resultados por orden de relevancia. Es interesante que los datos más relevantes sean siempre los primeros en aparecer, según diferentes criterios de ordenación. Se permite que estos criterios, en ocasiones, sean personalizables bajo ciertos requisitos, lo cual dota al algoritmo de cierta flexibilidad y adaptación. Esto permite al motor adaptarse a las necesidades reales del entorno empresarial o del usuario.

De los elementos comentados, el índice se puede considerar como el corazón del motor de búsqueda. El índice y el algoritmo de ordenación empleado son los elementos diferenciadores que actualmente permiten la existencia de una gran diversidad de motores de búsqueda.

1.3.1 Buscadores de directorios

Los buscadores de directorio buscan información sobre contenidos de la página, y los resultados se presentan haciendo referencia a los contenidos y temática del sitio. Los algoritmos para este tipo de motor de búsqueda son más sencillos, y los sitios se presentan como enlaces, los cuales representan los sitios registrados. Estos tipos de buscadores no recorren los sitios web ni almacenan sus contenidos; lo que hacen es registrar algunos de los datos de la página web, como el título y la descripción (que normalmente se introducen en el momento de registrar el sitio en el directorio).

1.3.2 Buscadores jerárquicos

Este tipo de motor de búsqueda recorre las páginas coleccionando información sobre sus contenidos. Cuando se inicia una búsqueda de información concreta en los buscadores, ellos consultan su base de datos y presentan resultados clasificados por su distinción para esa búsqueda concreta. Los buscadores pueden almacenar en sus bases de datos desde la página de entrada de cada web hasta todas las páginas que residan en el servidor, una vez que el buscador la haya reconocido e indexado.

Debido a que los motores de búsqueda contienen millones —y a veces miles de millones— de páginas, muchos motores de búsqueda no solo se centran en el proceso de búsqueda, sino que también muestran los resultados en función de su importancia. Esta importancia de los resultados se determina normalmente mediante el uso de diversos algoritmos.

1.3.3 Spiders (arañas o crawlers)

Spider o araña es el nombre que se le ha dado al componente que se encarga de rastrear la web siguiendo su estructura hipertextual, para almacenar los enlaces en un lugar para su posterior análisis. En muchas ocasiones es llamado también crawler o webcrawler. Cada cierto tiempo, los spiders recorren la web para actualizar los contenidos recopilados con anterioridad; por ejemplo, los sitios de noticias y los blogs que están en constante actualización son analizados frecuentemente por estos programas. Además, los spiders pueden trabajar de forma conjunta, funcionando como una red de spiders, para obtener más documentos y almacenarlos en un repositorio o base de datos.

Figura 1.1 Funcionalidad de una araña o web crawler.

Como se puede observar en la figura 1.1, la fuente de todos los datos del motor de búsqueda es un crawler, que visita automáticamente las páginas y los índices de sus contenidos. Una vez que una página ha sido rastreada, los datos que contiene se procesan.

Los motores de búsqueda pueden realizar distintos tipos de búsquedas, ya sea por fecha, por un campo específico o por temas; en los siguientes puntos se explican algunos tipos :

• Restringido campo de búsqueda. Permite a los usuarios realizar su búsqueda sobre un determinado campo dentro de un registro almacenado de datos, por ejemplo “Título” o “Autor”.

• Consultas booleanas. Se hace uso de operadores booleanos para aumentar la precisión de una búsqueda.

• Búsqueda de concordancia. Produce una lista alfabética de todas las palabras principales que se encuentran en un texto con su contexto inmediato.

• Búsqueda de proximidad. Incluye solo los documentos que contienen dos o más palabras separadas por un número determinado de palabras.

• Expresión regular. Emplea una sintaxis para realizar consultas más complejas.

• Búsqueda facetada. Consiste en encontrar elementos o contenidos restringiendo el conjunto global de resultados a través de múltiples criterios o facetas, lo cual permitirá realizar la búsqueda mediante cualquier metadato del grafo semántico de una determinada entidad.

1.4 PROCESO DE INDEXACIÓN

El proceso de localizar y recuperar cada contenido de un archivo se conoce como indexación. Una palabra clave, asociada a un identificador de un archivo específico, se incluirá en un índice para, posteriormente, conocer la posición exacta de cada archivo y posibilitar el análisis de frecuencias de cada palabra. La mayoría de las herramientas de acceso a la web están basadas en indexación automática, que no es más que la indexación que se realiza a través de procedimientos algorítmicos.

Además, el proceso de indexación puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio índice y se reduce al máximo el tamaño de los archivos; por lo tanto, se reducen también las operaciones de lectura y escritura sobre el disco.

En el proceso de indexación, para agilizar la búsqueda de grandes cantidades de datos es necesario hacer uso de índices, ya que estos mejoran la velocidad de las operaciones, de modo que el acceso a la información es más rápido.

Cuando el número de archivos a buscar es potencialmente de gran tamaño, o la cantidad de consultas de búsqueda por realizar es considerable, el problema de búsqueda a menudo se divide en dos tareas: la indexación y la búsqueda. La etapa de indexación analizará el contenido de todos los archivos y creará una lista de los términos de búsqueda, a menudo llamada índice. En la etapa de búsqueda, al realizar una consulta específica, esta se realiza utilizando el índice en lugar de utilizar el contenido de los documentos originales.

1.4.1 Rendimiento en la indexación de documentos

A la hora de almacenar documentos hay que tener en cuenta que uno de los factores más importantes es el rendimiento. Los factores que afectan al rendimiento son: el número de campos a indexar o almacenar, el número de registros que se introducen, el tamaño de los documentos a indexar y el tipo de documento que se indexa (pdf, txt, xml, etc.).

En este punto, el proceso de indexación trata de reducir al máximo el tamaño de los archivos o tablas de la base de datos, para conseguir la mejor relación entre tiempo de ejecución de las consultas y exhaustividad del fichero inverso. Para ello, vamos a introducir los siguientes conceptos:

• stopwords: se trata de una lista de palabras de uso frecuente que no se tienen en consideración ni en el proceso de indexación ni en el de búsqueda.

• stemming: es un método para obtener la raíz semántica de una palabra. Las palabras se reducen a su raíz o stem (tema).

1.4.2 Stopwords

Las stopwords son palabras que no contienen un significado importante, por lo que no serán utilizadas en las consultas de búsqueda.

Se trata de una técnica de indexación que genera una lista de palabras de uso frecuente que no se tendrán en consideración y que se omitirán tanto en el momento del proceso de indexación como en el proceso de búsqueda. El hecho de que haya palabras que no aparezcan en el índice en una base de datos se debe a que son insignificantes (como los artículos y las preposiciones). Estas palabras son excluidas de las búsquedas para agilizar el proceso de indexar y analizar las páginas web. Algunos ejemplos de estas palabras son: “un”, “y”, “pero”, “cómo”, “o” y “qué”. Los buscadores, en Internet, no pueden impedir el uso de estas palabras; por lo tanto, las ignoran.

1.4.3 Stemming

Stemming es un método que permite reducir una palabra a su raíz o stem. Hay algunos algoritmos de stemming que ayudan en sistemas de recuperación de información. El stemming aumenta el recall, que es una medida sobre el número de documentos que se pueden encontrar con una consulta. Por ejemplo, una consulta sobre “bibliotecas” también encontrará documentos en los que solo aparezca “bibliotecario”, porque el stem de las dos palabras es el mismo (“biblioteca”).

Esta técnica se suele utilizar cuando queremos que un término pueda reducirse a su común denominador, y permitirá la recuperación de todos los documentos cuyas palabras tengan la misma raíz común (por ejemplo: catálogo, catálogos, catalogación, catalogador, catalogar, catalogando, catalogado).

1.5 RECUPERACIÓN DE LA INFORMACIÓN

La recuperación de información, o information retrieval, es una disciplina que se encarga de estudiar las técnicas para buscar información dentro de documentos que no se encuentran organizados o cuando, debido a la gran cantidad de documentos, resulta difícil buscar de forma manual.

Los sistemas para la recuperación de información están formados por diferentes mecanismos, que son los que permiten realizar las búsquedas, y un spider o crawler, que es el que se encarga de recorrer la web siguiendo los enlaces que va encontrando en las páginas o documentos. Este recorrido puede realizarse tanto en profundidad como a lo ancho y, generalmente, este tipo de programas suelen estar alojados en ordenadores con gran capacidad de memoria y CPU.

Los documentos encontrados en la web son analizados por el crawler, que les da un formato común. Después, estos documentos se almacenan en alguna estructura de datos, que puede ser un sistema relacional en forma de índices para su rápido acceso. En este proceso se realiza un análisis de cada una de las páginas o documentos encontrados y, por cada palabra encontrada, se guarda la referencia del documento donde se encuentra.

Cuando el usuario escribe el criterio a buscar, los resultados se muestran de forma ordenada según una relevancia que se calcula teniendo en cuenta el modelo de recuperación utilizado.

Este último componente también se comunica con el mecanismo de formulación de consulta, que es el que utiliza los términos introducidos por el usuario y los convierte en los términos que están almacenados en el índice. De esta forma, realiza una recuperación de todos los documentos que presentan estos términos, ordenándolos por la relevancia asociada a cada documento.

A partir de una colección de documentos, se seleccionan aquellos relacionados con una pregunta de un usuario a través de un conjunto de palabras claves. La recuperación de información tiene las siguientes características:

• La información es una pieza fundamental en todos los procesos de nuestra sociedad.

• El desarrollo de las tecnologías de la información (TI) ha permitido crear sistemas y servicios de información cada vez más ágiles.

• El desarrollo de las comunicaciones ha permitido el acceso a información desde cualquier sitio de forma remota.

• Hoy en día disponemos de gran cantidad de repositorios y documentación en Internet.

A continuación, se muestran los principales pasos para la recuperación de la información (figura 1.2):

1. Obtener representación de los documentos. Generalmente, los documentos se presentan utilizando un conjunto más o menos grande de términos índice. La elección de dichos términos es el proceso más complicado.

2. Identificar la necesidad informativa del usuario. Se trata de obtener la representación de esa necesidad y plasmarla formalmente en una consulta acorde con el sistema de recuperación.

3. Búsqueda de documentos que satisfagan la consulta. Consiste en comparar las representaciones de documentos y la representación de la necesidad informativa para seleccionar los documentos pertinentes.

4. Presentación de los resultados al usuario. Puede ser desde una breve identificación del documento hasta el texto completo.

5. Evaluación de los resultados. Para determinar si son acordes con la necesidad informativa.

Figura 1.2 Pasos para un proceso de recuperación de información.

Los sistemas de recuperación basados en términos índice se apoyan en la idea fundamental de que tanto el contenido de los documentos como la necesidad informativa del usuario pueden representarse con términos índice, lo cual permite agrupar diferentes documentos para representar un concepto. Los documentos se pueden clasificar, a grandes rasgos, en dos categorías:

• Documentos primarios: informes, artículos, páginas web, etc.

• Documentos secundarios: título, autor, resumen, etc.

La necesidad informativa se expresa formalmente mediante una consulta:

• Puede emplear diferentes términos y operadores booleanos.

• Puede realizarse en lenguaje natural.

La recuperación de información se utiliza en muchas de las aplicaciones que encontramos hoy en día, por ejemplo:

• Bibliotecas digitales

• Buscadores de Internet

• Herramientas de búsqueda personal (correos electrónicos, documentos personales, etc.

1.5.1 Extracción de información

La extracción de información es un área de investigación que comprende la intersección entre lingüística computacional, machine learning, data mining, bases de datos y recuperación de información. Se trata de un proceso que consiste en obtener información relevante a partir de un conjunto de documentos. Por tanto, el problema estriba en extraer la información y convertirla en información estructurada para poder buscar, manejar y explotar la información que se desee de forma eficiente.

El objetivo final es elaborar sistemas que permitan encontrar y relacionar información relevante mientras ignoran otras informaciones no relevantes. La relevancia se determina a partir de una serie de guías que permiten especificar con la mayor exactitud posible el tipo de información a extraer.

Desde la perspectiva del procesamiento de lenguaje natural, los sistemas de extracción de información deben trabajar a distintos niveles: desde el reconocimiento de palabras hasta el análisis de frases, y desde el entendimiento a nivel de frase hasta el texto completo. A grandes rasgos, entre las principales tareas relacionadas con la extracción de la información podemos destacar:

• Extracción de entidades y relaciones:

−Entidades: con nombre y genéricas.

−Relaciones: entidades relacionadas de una forma predefinida.

−Eventos: pueden estar compuestos de múltiples relaciones.

• Subtareas comunes en la extracción:

−Preproceso: segmentación de frases, análisis morfológico y sintáctico.

−Creación de reglas y/o patrones de extracción: de forma manual, automática o mixta.

−Aplicación de reglas o patrones de extracción: para extraer nueva información.

−Post-proceso: integración de la información, resolución y desambiguación de términos.

1.5.2 Sistema de búsqueda/respuesta

Un sistema basado en búsqueda/respuesta parte de una consulta expresada en lenguaje natural y debe devolver no un documento que sea relevante (es decir, un documento que contenga la respuesta) sino la propia respuesta (normalmente, un hecho). Proporciona el fragmento de texto en el que se encuentra la respuesta a una pregunta del usuario.

A diferencia de los sistemas de recuperación de la información convencionales que utilizan técnicas estadísticas, los sistemas de búsqueda/respuesta emplean técnicas de PLN (procesamiento de lenguaje natural). Uno de los sistemas de búsqueda/respuesta más conocidos es el correspondiente al START (natural language question answering system) (figura 1.3).

http://www.ai.mit.edu/projects/infolab/globe.html

Figura 1.3 Sistema START de búsqueda/respuesta.

1.6 MOTORES DE BÚSQUEDA E INDEXADORES

Los sistemas de recuperación de información con índice invertido son sistemas caracterizados por tener una estructura de datos capaz de manejar grandes volúmenes de información orientados a texto. Esta funcionalidad está presente en los motores de búsqueda que se van a analizar en profundidad:

• Apache Lucene(https://lucene.apache.org) es una potente librería de recuperación de información que se basa en la elaboración de un índice invertido como principal estructura especializada en emparejar documentos de texto con términos de consulta. Lucene, al igual que otros motores de búsqueda, se distingue por la escalabilidad, el rápido despliegue, el manejo de grandes volúmenes de datos y la optimización orientada a búsqueda de textos en documentos.

• Apache Solr(https://lucene.apache.org/solr)  es una librería open source construida sobre la librería de Lucene, que incluye una interfaz web de administración, API en distintos lenguajes para la realización de consultas y una serie de mejoras funcionales sobre las características base que trae Lucene de serie.

• ElasticSearch(https://www.elastic.co/es/), construido sobre Apache Lucene, ha basado su modelo en una API REST y ha ganado popularidad en los últimos años. Se trata de una plataforma distribuida en tiempo real de búsqueda y análisis:

− ElasticSearch distribuye y organiza la información en clúster de nodos, por lo que lo podemos ejecutar en varios servidores si nuestra aplicación necesita escalar.

− ElasticSearch es un motor de búsqueda que funciona en tiempo real, ya que los datos están indexados. De esta forma, obtenemos respuestas a nuestras consultas de forma mucho más rápida si lo comparamos con otras soluciones.

En la actualidad, es común que las aplicaciones estén respaldadas por una base de datos sobre la que se implementan las búsquedas. Sin embargo, con este enfoque, la implementación de funcionalidades de búsqueda con cierta complejidad puede llegar a ser complicada debido a las limitaciones de las bases de datos. Por ejemplo, las búsquedas pueden no llegar a ser suficientemente eficientes si el volumen de información es muy grande o si la forma en que está estructurada la información no es la adecuada. En escenarios como estos, una plataforma especialmente dedicada a la optimización de las búsquedas puede resultar una alternativa más práctica y eficiente.

Estas plataformas utilizan un modelo de datos orientado a documentos que pueden pensarse como una base de datos de una sola tabla. Un documento es simplemente un conjunto de campos, como una tupla en una tabla de una base de datos, con la diferencia de que cada columna puede ser multivaluada.

Además, permiten la implementación de funcionalidades de búsqueda sobre documentos que facilitan al usuario la localización de recursos de una manera más rápida y organizada. Tomando como referencia la web DB-Engines, podemos ver que la solución más popular hoy en día es ElasticSearch. En el siguiente URL podemos ver los motores de búsqueda más populares:

https://db-engines.com/en/ranking/search+engine

Figura 1.4 Listado de motores de búsqueda.

De los motores mostrados en la figura 1.4, analizaremos en profundidad tanto ElasticSearch como Apache Solr (ambos basados en Lucene, que nos permite realizar búsquedas por una gran cantidad de datos de un texto específico). Gracias al motor Lucene sobre el que están implementados, estos motores nos ofrecen capacidades de búsquedas de texto, autocompletado y soporte de geolocalización. Podríamos definir a estos motores de búsqueda como bases de datos NoSQL orientadas a documentos JSON, que pueden ser consultados, creados, actualizados o borrados mediante una API REST.

1.6.1 Lucene

Lucene es el corazón de la mayoría de los motores de búsqueda de hoy en día. Básicamente acepta el texto que se va a buscar, lo almacena en una estructura de datos (índice invertido) y, luego, acepta varios tipos de consultas de búsqueda y devuelve un conjunto de resultados que coinciden con los criterios de búsqueda.

Muchas soluciones de búsqueda basadas en servidor, como Apache Solr o ElasticSearch, están construidas sobre Lucene y marcan una evolución en el desarrollo de motores de búsqueda. El objetivo del diseño de estas herramientas es ofrecer un tipo de soluciones que proporcionen escalabilidad y alta disponibilidad a la base que trae Lucene como motor de búsqueda.

En los últimos años han surgido diferentes proyectos de la fundación Apache que también se consideran parte del universo de Lucene. Aunque estos proyectos son independientes, y más conocidos en otros contextos, se pueden integrar de forma sencilla con Lucene. Entre estos proyectos podemos destacar Hadoop, Mahout (un framework para aprendizaje automático), Nutch (una aplicación de búsqueda basada en Lucene) y Tika (que permite analizar documentos en diferentes formatos, como PDF, y se puede utilizar para alimentar con datos un índice de Lucene).

• Hadoop:http://hadoop.apache.org

• Mahout:http://mahout.apache.org

• Nutch:http://nutch.apache.org

• Tika:http://tika.apache.org

Apache Lucene guarda toda la información en una estructura llamada índice invertido. Se trata de una estructura de datos donde para cada término que encontramos en los diferentes documentos, obtiene los índices donde aparecen. Puede pensar en el índice invertido como en una estructura de datos donde estos están orientados a términos en lugar de a documentos. 

Entre los conceptos clave que podemos encontrar en Lucene destacan:

• Index: colección de documentos con similares características.

• Type: partición lógica que contiene aquellos documentos que comparten información a través de un atributo.

• Document: unidad básica de información.

• Mapping: incluye datos sobre cómo la información se almacena en el índice en forma de atributos y propiedades, y sobre cómo se debe tratar un campo a la hora de hacer las búsquedas, a nivel de extraer tokens de una determinada cadena de búsqueda.

• Relevancia: son los algoritmos utilizados para clasificar los resultados basados en la consulta.

• Corpus: colección de todos los documentos del índice.

• Segmentos: datos fragmentados que almacenan el índice invertido y permiten buscar en el índice de una manera eficiente.

1.6.2 Índice invertido

El índice invertido es el corazón del motor de búsqueda. Es como una estructura en formato diccionario en un formato clave-valor, donde las claves son los términos que hemos generado con los n-gramas de todos los documentos. Cada índice invertido almacena la posición y el identificador del documento. Para cada término nos dice en qué documentos (indica la posición) aparece cada uno.

El índice invertido se crea por temas de optimización y son las estructuras de datos las que permiten realizar búsquedas sobre los documentos. Por ejemplo, Lucene, debido a su índice invertido, es uno de los motores más rápidos la hora de buscar un término en un campo. Cada campo que se indexa en Lucene se convierte en una estructura de búsqueda rápida para su tipo particular donde, por ejemplo, los campos de texto se dividen en tokens y los campos numéricos se convierten en sus representaciones binarias.

1.6.3 Apache Solr

Apache Solr es un motor de búsqueda de código abierto basado en la librería de búsqueda, escrita en Java, Lucene. Al haber sido desarrollado durante varios años y con las colaboraciones de la comunidad de desarrolladores, ha conseguido mejorar sus funcionalidades con el paso del tiempo. Apache Solr, además, provee diversas API para realizar desarrollos que precisen del uso del motor de búsqueda para recuperar información, y es muy sencillo trabajar con él gracias a su funcionalidad transparente al usuario. Para su ejecución, requiere de una máquina o servidor local y tener instalada la JVM (Java virtual machine) en el sistema.

1.6.4 ElasticSearch

ElasticSearch es un motor de búsqueda open source y, al igual que Apache Solr, está basado en la librería de búsqueda de Java Lucene. Sin embargo, ElasticSearch ha centrado su desarrollo en optimizar su funcionamiento y ha intentado ofrecer siempre funcionalidades que operan como motor de búsqueda de forma óptima. Esto quiere decir que, aunque provee numerosas API de desarrollo, intenta dejar la funcionalidad ajena al proceso de búsqueda a selección del desarrollador. Aun así, ElasticSearch es hoy en día uno de los mejores motores de búsqueda debido a lo bien construido que está y a una gran comunidad de usuarios que respalda el proyecto.

El hecho de que ElasticSearch utilice Lucene para resolver las búsquedas supone una ventaja en comparación con otros sistemas de consulta de bases de datos SQL. Una llamada a una API nos permite realizar búsquedas utilizando objetos JSON, lo cual resulta mucho más flexible y da a cada parámetro de búsqueda dentro del objeto un peso, importancia y/o prioridad diferentes.

Por ejemplo, insertar un documento en ElasticSearch es tan fácil como llamar al API REST que proporciona y enviar un objeto JSON mediante el método POST; si va a actualizar un documento, se utiliza el método PUT. Entre las ventajas que ofrece ElasticSearch destacamos:

• Podemos añadir un documento sin crear un índice.

• Si el índice no ha sido creado, ElasticSearch creará automáticamente el tipo de asignación y los campos al añadir un documento.

• ElasticSearch lo que hace internamente es deducir los tipos de datos basados en los del documento.

• En ElasticSearch, todas las conversiones de tipos se gestionan automáticamente. La búsqueda de un término es archivada por ElasticSearch utilizando el formato correcto para el campo.

1.6.5 Otros motores de búsqueda

Dentro del mercado IT podemos encontrar otros motores de búsqueda, entre los que podemos destacar:

• Splunk(https://www.splunk.com) es una plataforma y un motor de búsqueda orientado a las anaĺíticas para el Big Data.

• Algolia(https://www.algolia.com). Algolia’s Search es un producto que se ofrece como un SaaS (software as a service