¿Qué es una buena biblioteca de recuperación de información de código abierto (motor de búsqueda)?

Así que tengo una aplicación Java ejecutándose en un servidor websphere. El servidor tiene una base de datos Oracle de cajas. Cada caja tiene una lista de cosas en ella. Cada cosa tiene una descripción principal (entrada como texto de humanos) y una lista de pares de etiqueta/valor (es decir, color:negro, cantidad:3, etc.) que describen la cosa.

Me gustaría permitir que un usuario busque en esta base de datos, así que necesito una biblioteca para buscar en la base de datos y clasificar los resultados. El usuario podrá ingresar el mismo tipo de información descrita anteriormente. Quiero poder enumerar los cuadros que más se acerquen a lo que ingresó el usuario.

He buscado en algunas bibliotecas de búsqueda como Lucene y Xapian, pero no estoy seguro de las capacidades exactas de varias bibliotecas. Me gustaría poder ver los pros y los contras y un poco sobre cómo funcionan, así que comencé a investigar un poco.

Pero antes de eso, me gustaría escuchar sus sugerencias para este proyecto en particular.

Agregué las etiquetas motor de búsqueda y biblioteca . -- ¿No está seguro si la PNL (@FranckDernoncourt) y el análisis de datos realmente se aplican aquí?
La recuperación de información de @unor a menudo se enseña en los cursos de PNL, por ejemplo, Coursera.org/course/nlp ; pero no me importa si desea eliminar la etiqueta nlp.

Respuestas (3)

También puedes probar ElasticSearch .

ElasticSearch es un servidor de búsqueda sobre Lucene . Proporciona una API Json para realizar consultas de búsqueda y es realmente útil cuando se trata de escalabilidad .

Para indexar una base de datos existente, debe sondear continuamente su contenido.
Aquí hay un tutorial para eso.

En el lado negativo, debe estar familiarizado con Lucene para ir más allá de lo básico (por ejemplo, analizadores personalizados, tokenizadores, etc.), esas cosas son necesarias para una búsqueda efectiva.

Por último, pero no menos importante, ElasticSearch proporciona Y una API de Java que es un contenedor de la API de Json. Hasta ahora solo he trabajado con Json, pero he investigado un poco sobre esto y es muy fácil de usar si ya tienes una aplicación Java.

Código abierto (licencia Apache 2)

Solr podría ser una buena opción para su elección.

Al igual que ElasticSearch , Solr se basa en Lucene y proporciona las mismas funcionalidades que full-text search, hit highlightingy easy-scalabilityentre otras.

Generalmente, al buscar esas 2 soluciones, encontrará muchos recursos. Te dejo a ti decidir cuál usar;) Solr definitivamente tiene la ventaja cuando se trata de madurez y número de usuarios.

Para indexar su base de datos existente, puede usar un DataImportRequestHandler que se usa JdbcDataSourcespara conectarse a una o varias bases de datos e importar su contenido.

Código abierto (licencia Apache 2)

Bueno, dijiste las 3 palabras mágicas: database, text-searchy Java.
Recomiendo encarecidamente usar Hibernate-Search porque está hecho para este propósito.

Para ser más precisos, Hibernate-Search tiene la capacidad de:

  • Agregue búsqueda de texto en su base de datos existente mediante anotaciones en sus entidades existentes .
  • busque por aproximación (búsqueda difusa) y clasifique los resultados.
  • Es Lucenebásicamente pero muy fácil de usar en una base de datos, especialmente si ya usa Hibernate . Podría probar con Lucene , pero la sobrecarga de almacenar el índice, actualizarlo manualmente y, al mismo tiempo, tener en cuenta los cambios en el peso de los campos o la estructura de su base de datos, sí, realmente no vale la pena...
  • Extremadamente fácil para comenzar: libros, excelente documentación, muchos ejemplos en línea y un inicio rápido que he creado si desea verificar cómo funciona.
  • El lema de Hibernate-Search es: "Google tu base de datos"

PD
He estado usando Lucene profesionalmente durante más de un año y había trabajado con y en Hibernate-Search en el pasado.

Código abierto (LGPL v2.1)