¿Cuál es mejor para la búsqueda eficiente de texto libre, la búsqueda de hibernación o Lucene?

StackOverflow https://stackoverflow.com/questions/5804456

  •  24-10-2019
  •  | 
  •  

Pregunta

Estamos desarrollando una aplicación web utilizando Spring MVC, Spring y Hibernate.

Necesitamos agregar capacidades eficientes de búsqueda de texto gratuito a nuestras aplicaciones. Para esto, estamos pensando en usar la búsqueda hibernada (usa Lucene debajo del capó) o directamente Lucene.

¿Cuál es la mejor opción para nosotros, ya que ya estamos usando Hibernate en nuestra aplicación? ¿Cuáles son los pros y los contras de uno sobre el otro?

Gracias.

¿Fue útil?

Solución

Lo dijiste tú mismo: usarás Lucene de una forma u otra.

La API de Lucene cruda no es muy fácil de usar. Es mucho más de bajo nivel que la búsqueda hibernada. Si ya está usando Hibernate, entonces es obvio: use Hibernate Search para implementar su funcionalidad de búsqueda de texto.

Otros consejos

Descargo de responsabilidad: soy uno de los desarrolladores de Hibernate Search.

El objetivo del proyecto no es competir con Lucene ni Solr, sino facilitar la mayor cantidad de integración posible con aplicaciones hibernadas, para evitar tener que mantener los dos mundos sincronizados y duplicar todas las operaciones de mapeo y Crud.

Si bien proporcionamos algunos ayudantes comunes y una buena encapsulación, Hibernate Search también puede entregarle una referencia directa a la API de Lucene, por lo que en caso de que necesite usar la API Lucene "cruda", nunca estará atrapado. También para escribir en el índice Hibernate Search proporciona un patrón común que resolverá la mayoría de los requisitos conocidos, pero en caso de que tenga requisitos muy no estándar, puede obtener el control total de los documentos escritos.

Solr es una buena alternativa, pero como es un servidor separado, debe interactuar con él a través de API REST, que es bastante diferente, con sus pros y contras. Tener un segundo servicio para administrar no siempre es deseado y, por supuesto, las invocaciones remotas nunca serán tan eficientes como las referencias directas a Lucene y a todos sus filtros y cachés internos. No toda la funcionalidad de Lucene puede expuestos a través de una API remota, y si necesita hacer una operación de "bajo nivel", si esto no se implementa en Solr, no podrá hacerlo (sin parchear SOLR). Aún así, Solr es muy lindo, especialmente cuando desea compartir el índice con otras aplicaciones que no sean de Java, por lo que podríamos agregar un backend de Solr para la búsqueda de hibernación para eventualmente mantener un servidor SOLR en sincronización (especialmente si hay interés por ello, y posiblemente Un poco de ayuda).

Finalmente, la API de Lucene es muy duro. Gastamos mucho esfuerzo para aprovecharlo al máximo para proporcionar un rendimiento superior al tiempo que expone una API estable a las personas que usan la búsqueda de hibernación, básicamente hasta ahora todas las versiones han sido compatibles con el retroceso para proporcionar un aumento de rendimiento de "entrega" para usar los últimos últimos Los mayores trucos de Lucene, lo que en realidad cambia la API con bastante frecuencia; Estos cambios siempre son emocionantes, pero prepárese para mantener eso en su aplicación si no usa una abstracción adecuada.

La otra forma de usar Lucene es obtener la API de Middlman que se conoce como Solr. Solr se conectará a Lucene y Perfom HTTP Llamas para buscar. Tenga en cuenta que deberá construir y analizar el XML lo que consume Solr. Toda la funcionalidad de Lucene es Exponse a través de Solr y debería ser realmente útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top