Introducción a la búsqueda de Hibernate

Existen muchas aplicaciones web para proporcionar acceso a grandes cantidades de datos almacenados en una base de datos relacional, pero ¿cuál es la forma más fácil de permitir a los usuarios buscar entre esos datos y encontrar lo que necesitan? En este artículo, el Dr. Xinyu Liu presenta Hibernate Search, que integra las sofisticadas capacidades de búsqueda de Lucene con el marco familiar de mapeo relacional de objetos de Hibernate.

Apache Lucene es una biblioteca de motor de búsqueda de texto completo extensible y de alto rendimiento escrita en Java. Al principio, puede que no sea obvio por qué necesitaría tal cosa; después de todo, sus datos están bien archivados en una base de datos relacional decente. Si bien un RDBMS puede hacer un gran trabajo al proporcionar operaciones CRUD transaccionales en datos almacenados en un modelo relacional, las funciones de búsqueda definidas en SQL no siempre son capaces de cumplir con los requisitos funcionales y no funcionales de sus proyectos. Hay varios tipos de consultas que los RDBMS en general no admiten sin extensiones de proveedores:

  • Consultas difusas, en las que "difusas" y "wuzzy" se consideran coincidencias
  • Consultas derivadas de palabras, que consideran que "tomar", "tomar" y "tomar" son idénticas
  • Consultas de sonido, que consideran que "cat" y "kat" son idénticos
  • Consultas de sinónimos, que consideran que "salto", "salto" y "salto" son idénticos
  • Consultas sobre tipos de datos binarios BLOB, como documentos PDF, documentos de Microsoft Word o Excel, o documentos HTML y XML

Lo que es más decepcionante, los resultados de búsqueda de SQL no se clasifican por puntuaciones de relevancia de coincidencia. El estándar SQL simplemente no está diseñado para consultas de texto completo.

Las capacidades de búsqueda de Lucene, por otro lado, son ilimitadas. Lucene maneja todas las consultas que se acaban de mencionar y más; también le permite encontrar documentos de texto similares a otros documentos a través de su consulta avanzada de vector de términos. Por ejemplo, puede buscar el contenido de varios libros para encontrar uno con contenido similar al de Hibernate in Action . La arquitectura del analizador en Lucene aprovecha las capacidades de internacionalización y localización integradas de Java, lo que hace que las consultas de texto completo estén disponibles para varios idiomas en todo el mundo. Lucene ofrece un rendimiento sobresaliente a través de algunas técnicas innovadoras, como un índice invertido. El sitio web de Apache Lucene presenta una lista de evaluaciones comparativas de rendimiento que demuestran qué tan bien se desempeña y escala Lucene.

Tenga en cuenta que algunos proveedores de bases de datos implementan funciones de búsqueda de texto completo en sus productos como extensiones SQL. Hasta cierto punto, estas funciones propietarias son bastante fáciles de usar, pero comprometen la portabilidad de sus aplicaciones a nivel de base de datos. Además, las funciones no se ajustan a la experiencia de usuario que ofrece Lucene y, en condiciones extremas, el rendimiento de Lucene es superior.

Hibernate y la API de persistencia de Java

Hibernate es una biblioteca de mapeo relacional de objetos (ORM) madura y de alto rendimiento. Como solución ORM no intrusiva, Hibernate proporciona API de consulta de objetos para clases de modelo de persistencia de objetos Java antiguos (POJO) y enlaces de datos automáticos entre el objeto y las representaciones relacionales de datos de persistencia. En esencia, le permite centrarse en la programación orientada a modelos de dominio.

La API de persistencia de Java (JPA) es la interfaz de gestión de persistencia y mapeo relacional de objetos estándar definida como parte de Java EE 5, la última versión de la especificación Java empresarial. En gran parte inspirado por Hibernate, JPA surgió para reemplazar el controvertido modelo de programación de beans de entidad. JPA tiene un estilo de programación POJO y una interfaz de consulta de objetos (JPAQL) fáciles de usar; Una mejora de JPA con respecto a los beans de entidad es que no necesita un contenedor EJB 3 para ejecutar aplicaciones que usan la API, ya que admite modos de ejecución autónomos (Java SE) y administrados por contenedores (Java EE). Los proveedores populares de JPA incluyen Apache OpenJPA y Oracle TopLink, así como el propio Hibernate, que implementa la especificación JPA a través de los módulos Hibernate Annotations y Hibernate EntityManager. En este artículo, usaréJPA / Hibernate como abreviatura de los dos trabajando juntos.

Este artículo le presenta la tecnología de Hibernate Search a través de una aplicación de muestra programada en un estilo POJO con las últimas anotaciones de Spring 2.5. Antes de comenzar, debe tener conocimientos básicos de Spring, Hibernate / JPA y Lucene.