tutorial for java hibernate lucene full-text-search hibernate-search

java - for - Hibernate Search, Lucene o cualquier otra alternativa?



hibernate search spring boot (6)

Tengo una consulta que está haciendo ILIKE en algunos campos de texto de cadena o texto de la tabla que no es grande (500 000), pero para ILIKE obviamente demasiado grande, la consulta de búsqueda tarda alrededor de 20 segundos. La base de datos es postgres 8.4

Necesito implementar esta búsqueda para ser mucho más rápido.

Lo que me vino a la mente:

  1. Hice una columna adicional de TVECTOR ensamblada de todas las columnas que necesitan ser buscadas, y creé el índice de texto completo en ella. La búsqueda de texto completo fue bastante rápida. Pero ... No puedo mapear este tipo de TVECTOR en mi .hbms. Así que esta idea se cayó (en cualquier caso, la consideré más como una solución temporal).

  2. Búsqueda Hibernate (He oído hablar de ello por primera vez hoy) Parece prometedor, pero necesito una opinión con experiencia sobre él, ya que no quiero entrar en la API nueva, posiblemente no la más simple, para algo que podría hacerse más simple.

  3. Lucene

En cualquier caso, esto ha sucedido ahora con esta tabla, pero me gustaría que la solución sea más genérica y se aplique para casos futuros relacionados con búsquedas de texto completo.

¡Todos los consejos apreciados!

Gracias


Como ya está usando Hibernate y Lucene, Hibernate Search es una excelente opción.

Lo que Hibernate Search proporcionará principalmente es un mecanismo para actualizar sus índices de Lucene cuando se modifican los datos, y la capacidad de maximizar lo que ya sabe sobre Hibernate para simplificar sus búsquedas con los índices de Lucene.

Podrá especificar qué campos específicos de cada entidad desea indexar, así como también agregar múltiples tipos de índices según sea necesario (por ej., Texto derivado y completo). También podrá administrar el gráfico de índice para las asociaciones para que pueda realizar consultas bastante complejas a través de Search / Lucene.

He descubierto que lo mejor es confiar en Hibernate Search para las pesadas búsquedas de texto, pero revertir a Hibernate simple antiguo para una búsqueda más tradicional y para hidratar los gráficos de objetos complejos para la visualización de resultados.


He usado Lucene en el pasado para indexar tablas de bases de datos. La solución funciona muy bien, pero recuerde que necesita mantener el índice. O bien, actualiza el índice cada vez que persisten sus objetos o tiene un indexador de daemon que vuelca las tablas de la base de datos en su índice Lucene.

¿Has considerado a Solr ? Está construido sobre Lucene y ofrece indexación automática desde una base de datos y una API de descanso.


Recomiendo Compass . Es un proyecto de código abierto construido sobre Lucene que proporciona una API más simple (que Lucene). Se integra muy bien con muchas bibliotecas y marcos comunes de Java, como Spring e Hibernate.


Recomiendo encarecidamente Hibernate Search, que proporciona un puente muy fácil de usar entre Hibernate y Lucene. Recuerda que usarás ambos aquí. Simplemente anota propiedades en las clases de tu dominio sobre las que deseas poder buscar. Luego, cuando actualiza / inserta / elimina una entidad habilitada para buscar Hibernate Search, simplemente actualiza los índices relevantes. Esto solo ocurrirá si la transacción en la que ocurre la base de datos ocurre. Por ejemplo, si se revierte los índices no se romperán.

Entonces para responder a sus preguntas:

  1. Sí, puede indexar columnas específicas en tablas específicas. También tiene la capacidad de Tokenizar el contenido del campo para que pueda coincidir en partes del campo.

  2. No es difícil de usar, simplemente calcula en qué propiedades desea buscar. Dile a Hibernate dónde guardar sus índices. Y luego puede usar las interfaces EntityManager / Session para cargar las entidades que ha buscado.


Hace un año hubiera recomendado Compass. Fue bueno en lo que hace, y técnicamente sigue felizmente en la aplicación que desarrollé y mantengo.

Sin embargo, no hay más desarrollo en Compass, y los esfuerzos se han cambiado a ElasticSearch. Desde el sitio web de ese proyecto no puedo determinar si está listo para Big Time o incluso si está vivo.

Así que me estoy cambiando a Hibernate Search, que no me da esa sensación tan buena, pero que la migración todavía está en sus etapas iniciales, así que me reservaré el juicio por un tiempo más.


Todos los proyectos se basan en Lucene. Si desea implementar funciones muy avanzadas, le aconsejo que use Lucene directamente. De lo contrario, puede usar Solr, que es una poderosa API además de lucene que puede ayudarlo a indexar y buscar desde DB.