Posts Tagged ‘Sintaxis’

h1

Sintaxis de la búsqueda en Lucene

15 diciembre 2008
Desde hace ya unos cuantos años, Lucene se ha convertido en el motor de búsqueda más utilizado en los proyectos de software libre, está integrado en gestores de contenido como OpenCms, gestores documentales como Alfresco y gestores de portales como Liferay. Cada vez va cobrando más y más fuerza desde su creación, la primera vez que yo lo usé en el 2005 estaba por la versión 1.* y ya va por la versión 2.4.0.
 
Además de tener la posibilidad de crear nuestras proprias consultas a través de su API, también nos proporciona un lenguaje de consultas a través de un parseador y un lexer que interpreta la cadena utilizando Lucene JavaCC.
 
Ya tiene unas cuantas herramientas entre las que destacamos Apache Solr y Luke Lucene, esté último nos facilitará mucho nuestra tarea, pues no proporciona una interfaz gráfica dónde podremos probar nuestras consultas.

A continuación explicaré un poco la sintaxis de la búsqueda en Lucene.

Lo primero que tenemos que saber es que una consulta se divide en los términos y los operadores, de forma individual o por frases. Un sólo termino seria “hola”, y un grupo de términos o frases sería “hola Juan”, para ello hay que delimitar la frase entre comillas dobles. 

A la hora de realizar la búsqueda, podemos indicarle a Lucene cuales son los campos en los que queremos que consulte, esto se haría separando los campos de la consulta mediante “:”, es decir, nombre_campo:consulta.

Algunos de los caracteres especiales de Lucene son:

? :  Implicaría una coincidencia de cualquier cáracter. Por ejemplo, “hol?” nos devolvería cualquier palabra que empiece por “hol” seguida de cualquier cáracter. 

*: Implicaría la coincidencia múltiple de cualquier cáracter. Por ejemplo, “hol*” nos devolvería cualquier palabra que empiece por “hol” seguida de cualquier cosa.

Lucene también tiene la opción del uso de la lógica o Fuzzy logic, que se basa en el algoritmo de la búsqueda de  Levenshtein. Haciendo uso de, “~”, al final de una sola palabra, por ejemplo, hola~, nos devolvería todas las palabras similares a hola.  También se le puede aplicar un parámetro entre 0 y 1 para indicar mayor o menor similitud: hola~0,8. Si no se le indica nada, toma por defecto el valor 0,5.

Así mismo, también tenemos la búsqueda por rangos que sería de la siguiente manera, fecha: [20020101  to  20030101]  Hay que tener en cuenta que las consultas Rango no están reservados para los campos de fecha. Este tipo de búsquedas no son sólo para fechas también se pueden hacer para palabras, titulo:{Aida TO Carmen}, que nos devolvería todos los documentos cuyos títulos están entre Aida y Carmen, pero sin incluir el Aida y Carmen.

Para darle relevancia a un término lo único que tenemos que hacer es ponerle ^, por ejemplo, hola^4, el valor no puede ser negativo aunque si puede ser menor que uno.

Se le pueden aplicar condiciones a las búsquedas mediante operadores booleandos como:

 “+”:  Indica que debe existir la palabra en el documento.

 OR: Indica la unión de los conjuntos de palabras, también se puede usar ||.

 NOT:  Indica que no debe existir la palabra en el documento.

“-“: Indica que no debe existir en el documento el conjunto de palabras.

AND: Indica la unión de los conjuntos de palabras.

Estas son algunas de las características básicas de la sintaxis de búsqueda de Lucene, espero que haya sido útil.

Un saludo.