Sintaxis de la búsqueda en Lucene
15 diciembre 2008A continuación explicaré un poco la sintaxis de la búsqueda en Lucene.
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.
Que dolores de cabeza nos dio esto en su dia jejeje.
por Israel Roman 19 diciembre 2008 at 6:07 pmMás de uno, nos costó dominar la cosa e integrarlo con OpenCms, pero lo conseguimos….lucenito, lucenito….
por alejandroalves 20 diciembre 2008 at 3:08 pmHola.
por Antonio 20 enero 2009 at 4:12 pmEstoy buscando información acerca de Lucene 2.4.
He intentado probar algunos ejemplos como los del libro Lucene in Action o el luceneweb.war pero ambos me dan errores o métodos «deprecated». Buscando el por que de los deprecated he visto en otras pags, foros y en el API de Lucene 2.4 que hay métodos que han pasado a ser obsoletos casualmente muchos de los que me marca como error el eclipse…habría que sustituir todos los métodos deprecated por otros mas nuevos?
¿Sabría alguien como solucionar los problemas que tengo ? ¿Alguien me puede decir donde conseguir un ejemplo en Lucene 2.4 en zip o .war para ver la «nueva sintaxis»? GRACIAS por adelantado. Saludos
Buenas Antonio,
Estoy haciendo un artículo sobre lucene 2.4, pero ando un poco liado últimamente y tengo el blog un tanto de lado. Aquí tienes un par de enlaces que espero que te sirvan de ayuda.
http://www.debugmodeon.com/item/108868/introduccion-a-apache-lucene-java
por Alejandro Alves 20 enero 2009 at 4:40 pmUn saludo
Hola Alejandro.
por Antonio 20 enero 2009 at 5:00 pmGRACIAS por tu rápida respuesta. Ambos enlaces ya les había echado un ojo (de hecho en el primero de ellos también he escrito para ver si me podían solucionar mi problema)asique no se muy bien como solucionar-cambiar estos métodos deprecated.
¿De que trata tu artículo de lucene 2.4? Estoy deseoso de leerlo que se agradece leer de vez en cuando información bien explicada en español y ya de paso comprobar si me puede solucionar mi problema.
Si tienes algun ejemplo tipo holamundo pero en Lucene se agradecería poderle echar un ojo poruqe la verdad es que estoy atascado.
Saludos
Buenas,
por Alejandro Alves 20 enero 2009 at 5:07 pmDe momento me estaba documentando, ya te digo, estoy muy liado y tengo esto un poco abandonado, cuando saque tiempo y lo termine. Te avisaré.
Un saludo
Antes que nada, saludos me parece que lucene es una herramienta poderosa pero tal vez sea demasiado engorrosa
por Efren 22 enero 2009 at 10:46 pmBuen material, pero me surge una duda
si el operador «-» indica que la palabra no se debe encontrar y busco
HEWLETT-PACKARD por ejemplo, esto me traería los registros que tienen HEWLETT pero no deben contener PACKARD, como le haría si quiero que busque HEWLETT-PACKARD con todo y el guión?
Buenas,
por Alejandro Alves 23 enero 2009 at 1:19 pmLo que debes hacer es usar el caracter de escape «\»
Un saludo
Hola Alejandro
He ido avanzando muy poco a poco en mis progresos de Lucene (que por cierto veo que es bastante amplio pero a la vez MUY INTERESANTE) y tras conseguir hacer un ejemplo muy sencillo de indexacion me surgen dudas en la búsqueda.
Cree un indice p por lo que tengo 4 «ficheros Lucene» en donde el indice p contiene HOLA, HOLA PAPA, ADIOS y ADIOS PAPA me sucede lo siguiene:
– Si pongo HOLA* SI me encuentra los 2 ficheros.
– Si pongo HOLA P* NO me lo encuentra puesto que la query es: query: p:hola p:p*
– Si pongo HOLA PAPA NO me lo encuentra puesto que la query es: query: p:hola p:papa
¿Como habría que expresarlo para que si busco HOLA me saque q existe en 2 ficheros (el de HOLA PAPA y el de HOLA)? Se me ocurre añadir * a todo detras de la cadena que busco pero me parecería bastante «cutre».
¿Y si pongo PAPA q me diga que sale en otros 2 (HOLA PAPA y ADIOS PAPA)? Pq la opción de hacer la query como *PAPA* no he conseguido hacerla…por lo que no sabría como hacerlo.
Espero que tu tb estés avanzando en tus conocimientos de Lucene…la verdad que para lo poco que lo he visto me ha parecido BASTANTE INTERESANTE.
Espero tu respuesta y espero que sirva de ayuda como todo lo que por ahora me has proporcionado.
Saludos
por Antonio 4 marzo 2009 at 4:47 pmBuenas,
por Alejandro Alves 10 marzo 2009 at 12:20 pmPerdona que te haya tardado en responder, pero es que he estado de viaje.
Te comento, si quieres buscar dos palabras debes poner AND o OR dependiendo de si las quieres las dos juntas o una de las dos.
Un saludo
Muy buenas Alejandro¡¡ Soy compi del foro de opencmsHispano, jejej.
Tengo una duda con respecto a esto. Las condiciones que puedes conjugar.. las metes dentro de la variable query??
Puede poner algún ejemplo? es que me da error…
mi codigo:
String query = «Date:[» + fecha1 + » to «+ «fecha2]»;
search.setQuery(query);
«Date» lo he generado en la configuracion de campos del índice, desde la administracion de opencms.
es asi???
por lorena 30 noviembre 2010 at 3:56 pmuhmmmm, hazte la idea de que la cadena query está bien construida. Me he equivocado, sorry.
String query = “Date:[» + fecha1 + » to «+ fecha2 + «]“;
asi mejor
por lorena 30 noviembre 2010 at 3:58 pmGracias por tu articulo!!
por Rafael Ríos 10 junio 2011 at 10:30 amDe lo mejor que he leido.
Saludos