Hola a todos.
Me gustaría que me echaraís un cable aunque sea en lenguaje natural para implementar un algoritmo que me traduzca las órdenes de busqueda que un usuario envia a través de un buscador al formato (mas o menos) del lucene.
El tema es más o menos el siguiente:
En el formulario del buscador se podrá ingresar:
1. cadenas de texto por las que buscar
2. una palabra reservada como podria ser "titulo" (sin comillas) seguido de la cadena ":" (sin comillas tambien) y luego la lista de cadenas por las que quiere buscar dentro de lo que internamente para mis XML es el titulo.
3. o una mexcla de las dos cosas anteriores acompañada de los operadores archiconocidos AND, OR, NOT, +, - etc
Supongo que mas o menos sabeis a lo que me refiero porque Google funciona de la misma manera.
Tengo que recoger todo lo que el usuario me envia y traducirlo a órdenes que entiende el desarrollo de mi aplicacion para construir la consulta a la BD adecuada. Básicamente mi buscador trata el AND, OR, +, -, etc como lo hace Lucene.
Tendría que detectar cada vez que me llega una palabra de las reservadas (Ej: titulo, descripcion, texto, fichero) seguida de ":" para traducirlos a una expresión XPath correspondiente a la(s) etiqueta(s) XML donde el usuario ordena que tengo que buscar las cadenas de texto que aparecen después de ":"
La cosa se complica porque mi código tiene que ser extensible, es decir, que pueda ampliar ese rango de palabras de órdenes. Esto más o menos es lo más fácil ya que había pensado en un archivo XML que guardara la relación de esas palabras con la ruta XPath o incluso una tabla Hash, pero creo que el XML a la hora de modificarlo no implica mucho mas mientra que la tabla Hash creo que podria obligarme a compilar cada vez que quiera añadir alguna palabra nueva.
De todas formas, me gustaria ideas para implementar de forma eficiente la función que me tengo que construir.
La tecnología que estoy utilizando es Cocoon para la visualización de mi portal y cada vez que se hace una búsqueda en el buscador, desde Cocoon realizo una llamada HTTP a OpenCMS donde tengo implementado el Lucene (ligeramente modificado a mis necesidades de busqueda) y al que le tengo que pasar las órdenes de búsqueda con las rutas XPath y no como lo envia el usuario.
Muchisimas gracias por vuestra atencion y espero que me hayais entendido.
Saludos