You are on page 1of 11

LUCENE 1. INTRODUCCIÓN Lucene es un API para la recuperación de información. La misma agrega la capacidad de !

s"ueda e inde#ación a $e#$o comple$o en nues$ras aplicaciones. Lucene es u$ili%ado para rindar el sopor$e de inde#ación & !s"ueda en desarrollos en los "ue se necesi$a con$ar con un mo$or de !s"ueda. 's un pro&ec$o open source( implemen$ado en )a*a & es miem ro del popular Apac+e ,of$-are .ounda$ion & se dis$ri u&e a/o la Apac+e ,of$-are Licence. Lucene fue migrado a *arios lengua/es de programación( como ser P'R( C0( Ru &( C11( e$c. 2is$oria ,i *amos a los principios de Lucene nos si$uamos en el a3o 4555( cuando su creador Dog Cu$$ing +i%o el primer release. .ue $an$o el 6#i$o & la pro&ección "ue $u*o "ue al a3o siguien$e comen%ó a formar par$e de la familia de Apac+e ,of$-are .ounda$ion7s. Duran$e los siguien$es a3os Lucene $u*o un desarrollo cons$an$e & fue $ransform8ndose en una +erramien$a mu& poderosa para la inde#ación & la !s"ueda de información. La principal mo$i*ación de su creador fue la necesidad de !s"ueda de da$os en la -e o en cual"uier arc+i*o "ue con$enga $e#$o( para ello desarrolló una API fle#i le median$e la cual a $ra*6s de programación se pudiera agregar la capacidad de inde#ación & !s"ueda a cual"uier sis$ema "ue se es$6 desarrollando & "ue re"uiera de un mo$or de !s"ueda. Carac$er9s$icas :s$as son algunas de las carac$er9s$icas "ue +acen "ue Lucene sea una +erramien$a adap$a le & fle#i le; • • • • • • • • • • API escri$a en )a*a Disponi le en o$ros lengua/es de programación <ul$ipla$aforma Permi$e inde#ación incremen$al Algori$mos de !s"uedas fia les & confia les Permi$e ordenar resul$ados por rele*ancia =!s"ueda por campos & rangos de fec+a( e$c. Ordenación por cual"uier campo Permi$e uscar mien$ras se ac$uali%a el 9ndice ,opor$a $e#$o en UNICOD'( lo "ue +ace posi le luego a $ra*6s de parsers poder in$erpre$ar diferen$es forma$os de documen$os $ales como T>T( PD.( DOC( RT.( ><L( PPT & 2T<L.

).T, $ool

P8gina 1 de 11

A con$inuación mos$ramos un diagrama de in$eracción en$re el pro$o$ipo ).T,Tool & Lucene.

.UNCION', =?,ICA, Las funciones 8sicas "ue pro*ee Lucene son la de Inde#ación & =!s"ueda. Las mismas a arcan *ariedad de concep$os & aspec$os "ue se definen & se de$allan a con$inuación. Concep$os 8sicos '#is$en *arios concep$os "ue son fundamen$ales para el en$endimien$o de cómo funciona Lucene. Para comen%ar "ueremos de/ar claro el uso de $erminolog9as "ue se repe$ir8n a lo largo de es$e documen$o( como son el concep$o de Documen$s & de .ields. Lucene mane/a el concep$o de Documen$s @Documen$osA los cuales se encuen$ran compues$os por .ields @CamposA( o sea "ue un campo es una sección de un Documen$o. Cada campo es$a compues$o por dos par$es( el nom re & un *alor( donde el mismo puede ser un $e#$o. A con$inuación *eremos un e/emplo de un documen$o di*idido en *arios campos con su respec$i*o *alor.

).T, $ool

P8gina 4 de 11

Campo Empresa Teléfono Mail

Valor Aicoitia 59824356786 Aicoitia@adinet.com.uy

Documen$; es la unidad "ue se u$ili%a para inde#ar & uscar. 'l 9ndice consis$e en uno o *arios documen$os & las !s"uedas de*uel*en los documen$os "ue mac+ean con la información uscada. .ield; un documen$o se inde#a en ase a uno o m8s .ields @camposA para despu6s uscar la información por dic+os campos. Inde#ación; es el proceso median$e el cual se anali%a la información & se arma el 9ndice para poder iden$ificar de forma r8pida el lugar donde se encuen$ra alg!n da$o en par$icular. =!s"ueda; es el proceso median$e el cual +acemos uso del 9ndice para uscar dónde se encuen$ran los da$os solici$ados. Buer&; Lucene define un lengua/e de consul$a para las !s"uedas de los campos en los documen$os inde#ados. 4. IND'>ACIÓN Clases 8sicas u$ili%adas en la inde#ación. Las clases "ue se de$allan a con$inuación par$icipan ac$i*amen$e en el proceso de inde#ación & se podr9an considerar como 8sicas. • • • • • Inde#Cri$er Direc$or& Anal&%er Documen$ .ield

IndexWriter 's el componen$e cen$ral del proceso de inde#ación. Crea el 9ndice & agrega documen$os a uno &a e#is$en$e. 's un o /e$o "ue permi$e acceder al 9ndice pero no uscar o leer en el mismo. Directory :s$a clase represen$a la u icación de un 9ndice en Lucene "ui6n a su *e% u$ili%a su clases como .,Direc$or& para guardar los 9ndices en el sis$ema de arc+i*o. Tam i6n u$ili%a la su clase llamada RA<Direc$or& para almacenar los 9ndices en memoria( recomenda le cuando se usan 9ndices pe"ue3os.

).T, $ool

P8gina D de 11

Analyzer An$es de inde#ar un documen$o 6s$e pasa por la clase Anal&%er. :s$a clase elimina del documen$o pala ras "ue no a&udan o dis$inguen un documen$o de o$ro como E6l( la( en( unaF( e$c. Tam i6n con*ier$e las pala ras a min!sculas para "ue las !s"uedas sean m8s e#ac$as. Document Una clase Documen$ represen$a una colección de campos. 'l documen$o a inde#ar es separado en campos o en me$ada$os como el $9$ulo del documen$o( fec+a de modificación( au$or( en$re o$ras cosas. Field Cada documen$o con$iene uno o m8s campos( en Lucene e#is$en G m6$odos .ield diferen$es; • He&-ord; se almacena & se inde#a $al cual( no se anali%a. 's u$ili%ado para los campos "ue necesi$an guardarse en el 9ndice sin modificaciones como el direc$orio donde se encuen$ra el documen$o. UnInde#ed; se almacena pero nunca se usa en las !s"uedas( como las lla*es primarias de una ase de da$os. Te#$; el *alor se anali%a e inde#a. Un,$ored; se anali%a e inde#a. 's u$ili%ado para $odos los documen$os de $e#$o o si$ios -e donde solo se re"uiera guardar $9$ulo & con$enido.

• • •

'/emplos de inde#ación A con$inuación de$allaremos e/emplos de código necesarios para la inde#ación de información u$ili%ando Lucene aplicando las clases "ue *imos con an$erioridad. Creación de un 9ndice La creación del 9ndice es el pun$o de par$ida( &a "ue una *e% "ue es creado se comien%an a a3adir los documen$os "ue ser8n u$ili%ados. A con$inuación se mues$ra el código "ue cons$ru&e un 9ndice *ac9o.

).T, $ool

P8gina G de 11

La clase Inde#Cri$er es u$ili%ada para la creación de 9ndices pero $am i6n para su man$enimien$o. Cuando se crea un o /e$o de 6s$e $ipo se le pasan D par8me$ros( el primero represen$a el pa$+ donde se almacena el 9ndice( el segundo no es de rele*ancia & se es$a lece con el *alor null( & el $ercero es$a lece el *alor del primero @con $rue indicamos "ue es$amos creando el 9ndice & con false "ue lo es$amos a riendoA. A3adir documen$os a un 9ndice Luego de la creación del 9ndice podemos comen%ar a a3adir documen$os al mismo. A con$inuación de$allamos como inde#ar documen$os con forma$o .$#$( pudi6ndose cam iar $am i6n para "ue acep$e documen$os con e#$ensiones doc( #ml( r$f( e$c.

).T, $ool

P8gina I de 11

).T, $ool

P8gina J de 11

Para cada uno de los documen$os( se crea un o /e$o Documen$ & luego se llama al m6$odo addDocumen$ del Inde#Cri$er para "ue el mismo sea a3adido al 9ndice. Cuando se crea el o /e$o .ield( se de en de $omar cier$as consideraciones para "ue luego no se *ean afec$ados los procesos de !s"ueda so re el 9ndice. Cuando se crea o se a re un 9ndice para a3adir documen$os( al cons$ruc$or de Inde#Cri$er se le pasa como par8me$ro el nom re de dic+o 9ndice( un o /e$o Anal&%er & un *alor ooleano se$eado en false para indicar "ue no se crea el 9ndice sino "ue se a re uno &a e#is$en$e. 'l o /e$o Anal&%er se crea para anali%ar el $e#$o en ase a un de$erminado cri$erio poder o $ener la represen$ación in$erna de dic+o $e#$o en el 9ndice. Los Anal&%er procesan el $e#$o de en$rada con*ir$i6ndolo en una secuencia de $oKens( u$ili%8ndolos $an$o para a3adir un documen$o a un 9ndice como en los procesos de !s"ueda. D. ANALI,I, 's el proceso de con*er$ir los .ield u$ili%ados a la +ora de inde#ar( en $oKens. Un $oKen es la unidad 8sica de inde#ación & represen$a una !nica pala ra "ue se inde#ar8. Duran$e el proceso de con*ersión a $oKen( el Anal&%er e#$rae el $e#$o "ue se de e inde#ar mien$ras se le aplica lógica de $ransformación como ser el uso de ,$opCords el cu8l consis$e en eliminar del $e#$o una serie de pala ras "ue no resul$an !$iles para la o $ención de $6rminos como ser Eun( la( el( unaF( e$c( reali%ar s$emming @reducir las pala ras a la ra9% de la mismaA( remo*er los acen$os de las pala ras( con*er$ir $odo el $e#$o a le$ras min!sculas para !s"uedas donde no se diferencia ma&!sculas de min!sculas( e$c. :s$e proceso lle*a el nom re de $oKeni%ación & a&uda a reducir el $ama3o del 9ndice( &a "ue el $e#$o relacionado con un campo se reduce +as$a "ue "uedan solo sus elemen$os principales. Lucene inclu&e *arios anal&%ers( a con$inuación mencionamos los principales & luego de$allaremos 4 de los m8s impor$an$es. • • • • C+i$espaceAnal&%er L di*ide en $oKen cuando +a& espacios en lanco. ,impleAnal&%er L di*ide el $e#$o en carac$eres & los con*ier$e en min!sculas. ,$opAnal&%er M di*ide el $e#$o en carac$eres( $ransformarlo en min!sculas & "ui$a las s$opCords. ,$andardAnal&%er L $oKeni%a as8ndose en una gram8$ica sofis$icada "ue reconoce direcciones de eMmail( acrónimos( carac$eres en o$ros idiomas como C+ino( )apones( Horeano & m8s( pasa el $e#$o a min!sculas & "ui$a las s$opCords.

).T, $ool

P8gina N de 11

,$opAnal&%er Reali%a la di*isión de pala ras 8sica( las con*ier$e a min!sculas & elimina las ,$opCords. Consigo mismo $rae una lis$a de ,$opCords comunes en Ingl6s( la misma con$iene las siguien$es pala ras; Ea( an( and( are( as( a$( e( u$( &( for( if( in ( in$o( is( i$( no( no$( of( on( or( s( suc+( $( $+a$( $+e( $+eir( $+en( $+ere( $+ese( $+e&( $+is( $o( -as( -ill( -i$+F. ,$opAnal&%er $iene un segundo cons$ruc$or el cual acep$a "ue noso$ros le pasemos nues$ra propia lis$a de ,$opCords. Oeamos un simple e/emplo para *er como es el funcionamien$o 8sico de ,$opAnal&%er( supongamos "ue "ueremos inde#ar la siguien$e frase Eone is no$ enoug+F. 'l resul$ado del $oKen o $enido de la frase *a a ser EoneF por un lado & Eenoug+F por el o$ro &a "ue ac$!a el fil$ro del ,$opCords. ,$andardAnal&%er 's$e Anal&%er man$iene el +onor al ser el mas usado generalmen$e para el proceso de an8lisis duran$e la inde#ación. Tiene como *en$a/a "ue reali%a el proceso de $oKeni%ación siguiendo diferen$es $ipos l6#icos; alfanum6ricos( acrónimos( nom res de compa39as( direcciones de correo( nom res de compu$adoras( n!meros( pala ras con após$rofes( direcciones IP & carac$eres C)H @C+ino( )apones & HoreanoA. ,$andardAnal&%er $am i6n inclu&e duran$e el proceso( "ui$ar las s$opCords( u$ili%ando el mismo mecanismo "ue *imos reci6n con ,$opAnal&%er( la misma lis$a en ingl6s de pala ras & el cons$ruc$or "ue acep$a "ue noso$ros le pasemos nues$ra propia lis$a de ,$opCords. G. =P,BU'DA Concep$os 8sicos para la !s"ueda Reali%ar !s"uedas en Lucene significa familiari%arse con las siguien$es clases; • • • • • Inde#,earc+er Term Buer& TermBuer& 2is$s

IndexSeracher 's la clase principal( la cual se encarga de a rir el 9ndice para uscar en el( ofrece *arios m6$odos de !s"ueda( para reali%ar la !s"ueda pasa como par8me$ro la Buer& & regresa un o /e$o +i$s.

).T, $ool

P8gina Q de 11

Term Un $erm es la unidad 8sica para la !s"ueda. Cons$a del nom re del campo & su *alor. '/emplo;

'n 6s$e e/emplo se usca la pala ra EluceneF en el documen$o. Query Tiene diferen$es clases de Buer&( pero la m8s usada es la clase TermBuer& por los m6$odos "ue ella con$iene. O$ros $ipos de Buer& son =ooleanBuer&( P+raseBuer&( Prefi#Buer& & ,panBuer&. TermQuery TermBuer& es el $ipo de Buer& mas 8sico sopor$ado por Lucene( se u$ili%a para +acer coincidir documen$os "ue $ienen *alores espec9ficos. Hits Almacena los pun$os de referencia a los resul$ados de la !s"ueda( o sea $odos los documen$os encon$rados "ue se relacionan con la Buer&. La !s"ueda de documen$os es la o$ra funcionalidad impor$an$e proporcionada por Lucene. ,e apor$an muc+as clases & m6$odos para la represen$ación de consul$as para as9 poder uscar en el 9ndice los documen$os "ue cumplen con los cri$erios de !s"ueda. Las clases m8s des$acadas u$ili%adas en el proceso de !s"ueda son; Inde#,earc+er( Buer& & sus su clases( Buer&Parser & 2i$s. La clase ,earc+er es una clase a s$rac$a & es fundamen$al para la !s"ueda en un 9ndice de documen$os. Declara m6$odos "ue se implemen$an por sus su clases( como por e/emplo Inde#,earc+er( proporcionando as9 de 6s$a manera la forma de acceder & recuperar la información. 'l m6$odo m8s impor$an$e de la clase ,earc+ es el m6$odo searc+@A( el mismo de*uel*e $odos los documen$os "ue cumplen con las condiciones de !s"ueda. La clase Buer&( al igual "ue ,earc+er es una clase a s$rac$a( siendo Buer&Parser su su clase m8s impor$an$e( de la cual el m6$odo "ue m8s funcionalidad rinda a la +ora de la !s"ueda es parse@A. :s$e m6$odo par$e de una cadena de en$rada( del campo del documen$o dónde se reali%a la !s"ueda & de un anali%ador( o $iene como par8me$ro de salida una Buer&. Una *e% o $enida una Buer&( la misma es pasada como argumen$o al m6$odo searc+@A( la misma de*uel*e un o /e$o 2i$s( "ue represen$a una colección ordenada de documen$os. De es$a manera se o $ienen a"uellos documen$os "ue cumplen con las e#pec$a$i*as de la !s"ueda.

).T, $ool

P8gina R de 11

).T, $ool

P8gina 15 de 11

A con$inuación mos$ramos un e/emplo de código de cómo uscar en un 9ndice u$ili%ando Lucene.

).T, $ool

P8gina 11 de 11