Está en la página 1de 11

LUCENE

1. INTRODUCCIN
Lucene es un API para la recuperacin de informacin. La misma agrega la capacidad de
bsqueda e indexacin a texto completo en nuestras aplicaciones.
Lucene es utilizado para brindar el soporte de indexacin y bsqueda en desarrollos en los que
se necesita contar con un motor de bsqueda.
Es un proyecto open source, implementado en Java y es miembro del popular Apache Software
Foundation y se distribuye bajo la Apache Software Licence.
Lucene fue migrado a varios lenguajes de programacin, como ser PER, C#, Ruby, C++, etc.
Historia
Si vamos a los principios de Lucene nos situamos en el ao 2000, cuando su creador Dog
Cutting hizo el primer release. Fue tanto el xito y la proyeccin que tuvo que al ao siguiente
comenz a formar parte de la familia de Apache Software Foundations.
Durante los siguientes aos Lucene tuvo un desarrollo constante y fue transformndose en una
herramienta muy poderosa para la indexacin y la bsqueda de informacin.
La principal motivacin de su creador fue la necesidad de bsqueda de datos en la web o en
cualquier archivo que contenga texto, para ello desarroll una API flexible mediante la cual a
travs de programacin se pudiera agregar la capacidad de indexacin y bsqueda a cualquier
sistema que se est desarrollando y que requiera de un motor de bsqueda.
Caractersticas
stas son algunas de las caractersticas que hacen que Lucene sea una herramienta adaptable y
flexible:

API escrita en Java


Disponible en otros lenguajes de programacin
Multiplataforma
Permite indexacin incremental
Algoritmos de bsquedas fiables y confiables
Permite ordenar resultados por relevancia
Bsqueda por campos y rangos de fecha, etc.
Ordenacin por cualquier campo
Permite buscar mientras se actualiza el ndice
Soporta texto en UNICODE, lo que hace posible luego a travs de parsers poder interpretar
diferentes formatos de documentos tales como TXT, PDF, DOC, RTF, XML, PPT y HTML.

JFTS tool

Pgina 1 de 11

A continuacin mostramos un diagrama de interaccin entre el prototipo JFTSTool y Lucene.

FUNCIONES BSICAS
Las funciones bsicas que provee Lucene son la de Indexacin y Bsqueda. Las mismas abarcan
variedad de conceptos y aspectos que se definen y se detallan a continuacin.
Conceptos bsicos
Existen varios conceptos que son fundamentales para el entendimiento de cmo funciona
Lucene.
Para comenzar queremos dejar claro el uso de terminologas que se repetirn a lo largo de
este documento, como son el concepto de Documents y de Fields.
Lucene maneja el concepto de Documents (Documentos) los cuales se encuentran
compuestos por Fields (Campos), o sea que un campo es una seccin de un Documento.
Cada campo esta compuesto por dos partes, el nombre y un valor, donde el mismo puede ser
un texto.
A continuacin veremos un ejemplo de un documento dividido en varios campos con su
respectivo valor.

JFTS tool

Pgina 2 de 11

Campo
Empresa
Telfono
Mail

Valor
Aicoitia
59824356786
Aicoitia@adinet.com.uy

Document: es la unidad que se utiliza para indexar y buscar. El ndice consiste en uno o
varios documentos y las bsquedas devuelven los documentos que machean con la
informacin buscada.
Field: un documento se indexa en base a uno o ms Fields (campos) para despus buscar la
informacin por dichos campos.
Indexacin: es el proceso mediante el cual se analiza la informacin y se arma el ndice para
poder identificar de forma rpida el lugar donde se encuentra algn dato en particular.
Bsqueda: es el proceso mediante el cual hacemos uso del ndice para buscar dnde se
encuentran los datos solicitados.
Query: Lucene define un lenguaje de consulta para las bsquedas de los campos en los
documentos indexados.
2. INDEXACIN
Clases bsicas utilizadas en la indexacin.
Las clases que se detallan a continuacin participan activamente en el proceso de indexacin
y se podran considerar como bsicas.

IndexWriter
Directory
Analyzer
Document
Field

IndexWriter
Es el componente central del proceso de indexacin. Crea el ndice y agrega
documentos a uno ya existente. Es un objeto que permite acceder al ndice pero no
buscar o leer en el mismo.
Directory
sta clase representa la ubicacin de un ndice en Lucene quin a su vez utiliza
subclases como FSDirectory para guardar los ndices en el sistema de archivo. Tambin
utiliza la subclase llamada RAMDirectory para almacenar los ndices en memoria,
recomendable cuando se usan ndices pequeos.

JFTS tool

Pgina 3 de 11

Analyzer
Antes de indexar un documento ste pasa por la clase Analyzer. sta clase elimina del
documento palabras que no ayudan o distinguen un documento de otro como l, la, en,
una, etc. Tambin convierte las palabras a minsculas para que las bsquedas sean ms
exactas.
Document
Una clase Document representa una coleccin de campos. El documento a indexar es
separado en campos o en metadatos como el ttulo del documento, fecha de
modificacin, autor, entre otras cosas.
Field
Cada documento contiene uno o ms campos, en Lucene existen 4 mtodos Field
diferentes:

Keyword: se almacena y se indexa tal cual, no se analiza. Es utilizado para los


campos que necesitan guardarse en el ndice sin modificaciones como el
directorio donde se encuentra el documento.

UnIndexed: se almacena pero nunca se usa en las bsquedas, como las llaves
primarias de una base de datos.

Text: el valor se analiza e indexa.

UnStored: se analiza e indexa. Es utilizado para todos los documentos de texto


o sitios web donde solo se requiera guardar ttulo y contenido.

Ejemplos de indexacin
A continuacin detallaremos ejemplos de cdigo necesarios para la indexacin de informacin
utilizando Lucene aplicando las clases que vimos con anterioridad.
Creacin de un ndice
La creacin del ndice es el punto de partida, ya que una vez que es creado se comienzan a
aadir los documentos que sern utilizados.
A continuacin se muestra el cdigo que construye un ndice vaco.

JFTS tool

Pgina 4 de 11

La clase IndexWriter es utilizada para la creacin de ndices pero tambin para su


mantenimiento. Cuando se crea un objeto de ste tipo se le pasan 3 parmetros, el primero
representa el path donde se almacena el ndice, el segundo no es de relevancia y se establece
con el valor null, y el tercero establece el valor del primero (con true indicamos que estamos
creando el ndice y con false que lo estamos abriendo).
Aadir documentos a un ndice
Luego de la creacin del ndice podemos comenzar a aadir documentos al mismo. A
continuacin detallamos como indexar documentos con formato .txt, pudindose cambiar
tambin para que acepte documentos con extensiones doc, xml, rtf, etc.

JFTS tool

Pgina 5 de 11

JFTS tool

Pgina 6 de 11

Para cada uno de los documentos, se crea un objeto Document y luego se llama al mtodo
addDocument del IndexWriter para que el mismo sea aadido al ndice.
Cuando se crea el objeto Field, se deben de tomar ciertas consideraciones para que luego no
se vean afectados los procesos de bsqueda sobre el ndice.
Cuando se crea o se abre un ndice para aadir documentos, al constructor de IndexWriter se
le pasa como parmetro el nombre de dicho ndice, un objeto Analyzer y un valor booleano
seteado en false para indicar que no se crea el ndice sino que se abre uno ya existente.
El objeto Analyzer se crea para analizar el texto en base a un determinado criterio poder
obtener la representacin interna de dicho texto en el ndice. Los Analyzer procesan el texto
de entrada convirtindolo en una secuencia de tokens, utilizndolos tanto para aadir un
documento a un ndice como en los procesos de bsqueda.
3. ANALISIS
Es el proceso de convertir los Field utilizados a la hora de indexar, en tokens. Un token es la
unidad bsica de indexacin y representa una nica palabra que se indexar.
Durante el proceso de conversin a token, el Analyzer extrae el texto que se debe indexar
mientras se le aplica lgica de transformacin como ser el uso de StopWords el cul consiste en
eliminar del texto una serie de palabras que no resultan tiles para la obtencin de trminos
como ser un, la, el, una, etc, realizar stemming (reducir las palabras a la raz de la misma),
remover los acentos de las palabras, convertir todo el texto a letras minsculas para bsquedas
donde no se diferencia maysculas de minsculas, etc.
ste proceso lleva el nombre de tokenizacin y ayuda a reducir el tamao del ndice, ya que el
texto relacionado con un campo se reduce hasta que quedan solo sus elementos principales.
Lucene incluye varios analyzers, a continuacin mencionamos los principales y luego
detallaremos 2 de los ms importantes.

WhitespaceAnalyzer divide en token cuando hay espacios en blanco.

SimpleAnalyzer divide el texto en caracteres y los convierte en minsculas.

StopAnalyzer - divide el texto en caracteres, transformarlo en minsculas y quita las


stopWords.

StandardAnalyzer tokeniza basndose en una gramtica sofisticada que reconoce


direcciones de e-mail, acrnimos, caracteres en otros idiomas como Chino, Japones,
Koreano y ms, pasa el texto a minsculas y quita las stopWords.

JFTS tool

Pgina 7 de 11

StopAnalyzer
Realiza la divisin de palabras bsica, las convierte a minsculas y elimina las
StopWords. Consigo mismo trae una lista de StopWords comunes en Ingls, la
misma contiene las siguientes palabras:
a, an, and, are, as, at, be, but, by, for, if, in , into, is, it, no, not, of, on, or, s, such, t,
that, the, their, then, there, these, they, this, to, was, will, with.
StopAnalyzer tiene un segundo constructor el cual acepta que nosotros le pasemos
nuestra propia lista de StopWords.
Veamos un simple ejemplo para ver como es el funcionamiento bsico de
StopAnalyzer, supongamos que queremos indexar la siguiente frase one is not
enough. El resultado del token obtenido de la frase va a ser one por un lado y
enough por el otro ya que acta el filtro del StopWords.
StandardAnalyzer
Este Analyzer mantiene el honor al ser el mas usado generalmente para el proceso
de anlisis durante la indexacin. Tiene como ventaja que realiza el proceso de
tokenizacin siguiendo diferentes tipos lxicos: alfanumricos, acrnimos, nombres
de compaas, direcciones de correo, nombres de computadoras, nmeros, palabras
con apstrofes, direcciones IP y caracteres CJK (Chino, Japones y Koreano).
StandardAnalyzer tambin incluye durante el proceso, quitar las stopWords,
utilizando el mismo mecanismo que vimos recin con StopAnalyzer, la misma lista
en ingls de palabras y el constructor que acepta que nosotros le pasemos nuestra
propia lista de StopWords.
4. BSQUEDA
Conceptos bsicos para la bsqueda
Realizar bsquedas en Lucene significa familiarizarse con las siguientes clases:

IndexSearcher
Term
Query
TermQuery
Hists

IndexSeracher
Es la clase principal, la cual se encarga de abrir el ndice para buscar en el, ofrece varios
mtodos de bsqueda, para realizar la bsqueda pasa como parmetro la Query y
regresa un objeto hits.

JFTS tool

Pgina 8 de 11

Term
Un term es la unidad bsica para la bsqueda. Consta del nombre del campo y su valor.
Ejemplo:

En ste ejemplo se busca la palabra lucene en el documento.


Query
Tiene diferentes clases de Query, pero la ms usada es la clase TermQuery por los
mtodos que ella contiene. Otros tipos de Query son BooleanQuery, PhraseQuery,
PrefixQuery y SpanQuery.
TermQuery
TermQuery es el tipo de Query mas bsico soportado por Lucene, se utiliza para hacer
coincidir documentos que tienen valores especficos.
Hits
Almacena los puntos de referencia a los resultados de la bsqueda, o sea todos los
documentos encontrados que se relacionan con la Query.
La bsqueda de documentos es la otra funcionalidad importante proporcionada por Lucene.
Se aportan muchas clases y mtodos para la representacin de consultas para as poder
buscar en el ndice los documentos que cumplen con los criterios de bsqueda.
Las clases ms destacadas utilizadas en el proceso de bsqueda son: IndexSearcher, Query y
sus subclases, QueryParser y Hits.
La clase Searcher es una clase abstracta y es fundamental para la bsqueda en un ndice de
documentos. Declara mtodos que se implementan por sus subclases, como por ejemplo
IndexSearcher, proporcionando as de sta manera la forma de acceder y recuperar la
informacin.
El mtodo ms importante de la clase Search es el mtodo search(), el mismo devuelve todos
los documentos que cumplen con las condiciones de bsqueda.
La clase Query, al igual que Searcher es una clase abstracta, siendo QueryParser su subclase
ms importante, de la cual el mtodo que ms funcionalidad brinda a la hora de la bsqueda
es parse().
ste mtodo parte de una cadena de entrada, del campo del documento dnde se realiza la
bsqueda y de un analizador, obtiene como parmetro de salida una Query.
Una vez obtenida una Query, la misma es pasada como argumento al mtodo search(), la
misma devuelve un objeto Hits, que representa una coleccin ordenada de documentos. De
esta manera se obtienen aquellos documentos que cumplen con las expectativas de la
bsqueda.

JFTS tool

Pgina 9 de 11

JFTS tool

Pgina 10 de 11

A continuacin mostramos un ejemplo de cdigo de cmo buscar en un ndice utilizando


Lucene.

JFTS tool

Pgina 11 de 11

También podría gustarte