Einführung in die Suche im Ruhezustand

Es gibt viele Webanwendungen, die den Zugriff auf zahlreiche Datenmengen ermöglichen, die in einer relationalen Datenbank gespeichert sind. Wie können Benutzer diese Daten jedoch am einfachsten durchsuchen und finden, was sie benötigen? In diesem Artikel stellt Dr. Xinyu Liu die Hibernate-Suche vor, die die ausgeklügelten Suchfunktionen von Lucene in das bekannte objektrelationale Mapping-Framework von Hibernate integriert.

Apache Lucene ist eine leistungsstarke, erweiterbare Volltextsuchmaschinenbibliothek, die in Java geschrieben wurde. Zunächst ist es möglicherweise nicht offensichtlich, warum Sie so etwas benötigen - schließlich werden Ihre Daten in einer anständigen relationalen Datenbank gespeichert. Während ein RDBMS hervorragende Arbeit bei der Bereitstellung von CRUD-Transaktionsoperationen für in einem relationalen Modell gespeicherte Daten leisten kann, können in SQL definierte Suchfunktionen nicht immer sowohl die funktionalen als auch die nicht funktionalen Anforderungen Ihrer Projekte erfüllen. Es gibt eine Reihe von Abfragetypen, die RDBMS im Allgemeinen ohne Herstellererweiterungen nicht unterstützen:

  • Fuzzy-Abfragen, bei denen "Fuzzy" und "Wuzzy" als Übereinstimmungen betrachtet werden
  • Wortstämmige Abfragen, die "nehmen", "nehmen" und "genommen" als identisch betrachten
  • Klangähnliche Abfragen, bei denen "cat" und "kat" als identisch betrachtet werden
  • Synonymabfragen, bei denen "Sprung", "Sprung" und "Sprung" als identisch betrachtet werden
  • Abfragen zu binären BLOB-Datentypen wie PDF-Dokumenten, Microsoft Word- oder Excel-Dokumenten oder HTML- und XML-Dokumenten

Noch enttäuschender ist, dass SQL-Suchergebnisse nicht nach Übereinstimmungsrelevanzwerten eingestuft werden. Der SQL-Standard ist einfach nicht für die Volltextabfrage vorgesehen.

Die Lucene-Suchfunktionen sind dagegen unbegrenzt. Lucene bearbeitet alle gerade erwähnten Fragen und mehr. Mithilfe der erweiterten Term-Vektor-Abfrage können Sie auch Textdokumente finden, die anderen Dokumenten ähnlich sind. Sie können beispielsweise den Inhalt einer Reihe von Büchern durchsuchen, um einen zu finden, dessen Inhalt dem von Hibernate in Action ähnelt . Die Analysatorarchitektur in Lucene nutzt die integrierten Internationalisierungs- und Lokalisierungsfunktionen von Java, mit denen Volltextabfragen für verschiedene Sprachen weltweit verfügbar sind. Lucene liefert hervorragende Leistung durch einige innovative Techniken, wie zum Beispiel einen invertierten Index. Die Apache Lucene-Website enthält eine Liste von Leistungsbenchmarks, die zeigen, wie gut Lucene funktioniert und skaliert.

Beachten Sie, dass einige Datenbankanbieter Volltextsuchfunktionen in ihren Produkten als SQL-Erweiterungen implementieren. Bis zu einem gewissen Grad sind diese proprietären Funktionen recht einfach zu verwenden, beeinträchtigen jedoch die Portabilität Ihrer Anwendungen auf Datenbankebene. Außerdem entsprechen die Funktionen nicht der Benutzererfahrung, die Lucene bietet, und unter extremen Bedingungen ist die Leistung von Lucene überlegen.

Ruhezustand und die Java-Persistenz-API

Hibernate ist eine leistungsstarke, ausgereifte ORM-Bibliothek (Object Relational Mapping). Als nicht aufdringliche ORM-Lösung bietet Hibernate Objektabfrage-APIs für einfache POJO-Persistenzmodellklassen (Old Java Object) und automatische Datenbindungen zwischen dem Objekt und relationale Darstellungen von Persistenzdaten. Im Wesentlichen können Sie sich auf die domänenmodellorientierte Programmierung konzentrieren.

Die Java Persistence API (JPA) ist die Standardschnittstelle für objektrelationale Zuordnung und Persistenzverwaltung, die als Teil von Java EE 5, der neuesten Version der Java-Unternehmensspezifikation, definiert ist. JPA wurde weitgehend von Hibernate inspiriert und ersetzte das umstrittene Entity Bean-Programmiermodell. JPA verfügt über einen benutzerfreundlichen POJO-Programmierstil und eine Objektabfrage-Schnittstelle (JPAQL). Eine Verbesserung von JPA gegenüber Entity Beans besteht darin, dass Sie keinen EJB 3-Container benötigen, um Anwendungen auszuführen, die die API verwenden, da er sowohl eigenständige (Java SE) als auch containerverwaltete (Java EE) Ausführungsmodi unterstützt. Zu den beliebten JPA-Anbietern gehören Apache OpenJPA und Oracle TopLink sowie Hibernate selbst, das die JPA-Spezifikation über die zusätzlichen Module Hibernate Annotations und Hibernate EntityManager implementiert. In diesem Artikel werde ich verwendenJPA / Hibernate als Abkürzung für die beiden, die zusammenarbeiten.

In diesem Artikel wird Ihnen die Technologie der Ruhezustandssuche anhand einer Beispielanwendung vorgestellt, die in einem POJO-Stil mit den neuesten Spring 2.5-Anmerkungen programmiert ist. Bevor Sie beginnen, sollten Sie Grundkenntnisse in Spring, Hibernate / JPA und Lucene haben.