Hibernate Search Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de [email protected] Java, XML und Open Source seit 1998 ) Software Factory ) ) Object Rangers ) • Schlüsselfertige Realisierung von Java Software • Unterstützung laufender • Individualsoftware • Pilot- und Migrationsprojekte • Sanierung von Software • Software Wartung • Perfect Match • Rent-a-team • Coaching on the project • Inhouse Outsourcing Java Projekte ) Competence Center) • Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme • Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen 2 Hibernate Search © 2009 Orientation in Objects GmbH 1 Ihre Speaker Serge Ndong 3 Hibernate Search © 2009 Orientation in Objects GmbH Gliederung • Einführung • Vergleich SQL Suche, Volltextsuche • Konfiguration • Mapping • Queries • Ausblick 4 Hibernate Search © 2009 Orientation in Objects GmbH 2 search try to find something by looking or otherwise seeking carefully and thoroughly Quelle: http://www.askOxford.com 5 Hibernate Search © 2009 Orientation in Objects GmbH Grenzen von SQL Approximation (oder Synonym) ‚hybernate‘ statt hibernate Wildcard und Wortsuche %hibernate% brauchbaren Ergebnisse zuerst Relevanz ‚Persistenz‘ nah zu ‚Hibernate‘ Bedeutungsnähe Spaltengewichtung Suchen auf mehreren Spalten „a book about persisting Objects with ybernate from Wang“ 6 Hibernate Search © 2009 Orientation in Objects GmbH 3 Mismatch: Domain Modell - „Lucene-Welt“ Domain Modell „Lucene-Welt“ Buch Dokument Kategorie name:String Buch titel:String isbn:String autor1:String autor2:String ? Titel: Hibernate Search isbn: 1933988649 autor1: Emmanuel Bernard autor2: john Griffin exemplare. ausleihdatum:01.12:2008 Exemplar ausleihdatum:Date exemplare. ausleihdatum:16.12:2008 7 Hibernate Search © 2009 Orientation in Objects GmbH Hibernate Search Hibernate Eventsystem Synchron oder Asynchron Transparente Indizierung Objektstruktur in Indexstruktur Transfer verbindet Lucene mit Hibernate Hibernate Plattform Licence - LGPL verwendet Hibernate Core 8 Hibernate Search © 2009 Orientation in Objects GmbH 4 Konfiguration • Configuration by Exception – 80% default Konfiguration hibernate.properties #Hibernate Search Configuration hibernate.search.default.indexBase /users/application/indexes hibernate.cfg.xml <property name=„ hibernate.search.default.indexBase“> /users/application/indexes </property> 9 Hibernate Search © 2009 Orientation in Objects GmbH Mapping @Indexed(index="buechererverwaltung") @Entity@Table(name = "Buecher") public class Buch { @DocumentId @Id @Column(name = "buch_id") private Integer id; @Field private String titel; @Field(store = Store.YES, index = Index.UN_TOKENIZED) private String isbn; @IndexedEmbedded @ManyToOne @JoinColumn(name = "verlag_FK") private Verlag herausgeber; @ContainedIn @OneToMany(mappedBy = "buch") @JoinColumn(name = "Buch_FK") private Set<Exemplar> exemplare = new HashSet<Exemplar>(); 10 Hibernate Search © 2009 Orientation in Objects GmbH 5 Mapping Field Bridge @Field private String titel; – Built-in – Konvertierung vom Objekttyp zum String – Vergleich Index Strategien @Field @Field(name = “isbn_sort", index = Index.UN_TOKENIZED, store = Store.YES) private String isbn; – Tokenized? – Speicherung von Daten im Index – Eine Eigenschaft mehrfach Indizieren 11 Hibernate Search © 2009 Orientation in Objects GmbH Mapping Analyser @Field @Analyzer(impl=PhoneticAnalyzer.class) private String titel; – Text in Wörte zerstückeln (auf Tokenized Felder) – Default Analizer Konfigurierbar – auch auf Entität- und Feldebene einsetzbar Boost Factor @Field @Boost(1.5f) private String oioTags; – default ist 1.0 – Beeinflusst den Document Rank – Wert für Feld = Entity Wert * Feld Wert 12 Hibernate Search © 2009 Orientation in Objects GmbH 6 Mapping - Beziehungen Verlag Buch Exemplar Relation @IndexedEmbedded @ManyToOne @JoinColumn(name = "verlag_FK") private Verlag herausgeber; @ContainedIn @OneToMany(mappedBy = "buch") @JoinColumn(name = "Buch_FK") private Set<Exemplar> exemplare = new HashSet<Exemplar>(); 13 Hibernate Search © 2009 Orientation in Objects GmbH Query • Abfrage ähnlich wie JPA und Criteria Query • Objekte werden zurückgegeben, keine Dokumente – kein Code zum Konvertieren • Objekte aus dem Persitenzkontext – “Hibernate managed“ Objekten werden zurückgegeben • Benutzt die org.hibernate.Query /javax.persitence.query – Unterstützung von Paging • Querry auf abhängige Objekten – Join ähnliche Queries 14 Hibernate Search © 2009 Orientation in Objects GmbH 7 Query 1. Lucene Query 2. Hibbernate Search wrappen MultiFieldQueryParser parser; parser = new MultiFieldQueryParser( new String[] { “title“, “descr“}, new StandardAnalyzer()); org.apache.lucene.search.Query query = null; query = parser.parse(„o wie OIO“); // org.hibernate.search.jpa.FullTextEntityManager // org.hibernate.search.jpa.Search FullTextEntityManager fullTextEM; fullTextEM = Search.getFullTextEntityManager(entityMang); // org.hibernate.search.jpa.FullTextQueryFullTextQuery FullTextQueryFullTextQuery query; query = fullTextEM.createFullTextQuery(query, Book.class); 15 Hibernate Search © 2009 Orientation in Objects GmbH Query 3. Params 4. Happieness query.setFirstResult(15); query.setMaxResults(10); // gibt dann nur die document_id zurück // welches meist auch die Id ist query.setProjection(FullTextQuery.ID); List<Object[]> results = hibQuery.getResultList(); List<BookDTO> booksView = new ArrayList<BookDTO>(); for (Object[] result : results) { String id = (String) result[0]; booksView.add(findAsDTO(id)); } return booksView; 16 Hibernate Search © 2009 Orientation in Objects GmbH 8 Query Ausführungsschritte Such-String Hibernate Search query Ergebnisse aufbereiten Anfrage Ergebnisdokumente Lucene index Objekte laden Persistence context DB 17 Hibernate Search © 2009 Orientation in Objects GmbH Features • Sortierung bei Felden statt bei der Relevanz – Index.UN_TOKENIZED oder INDEX_NO_NORMS • Natives Lucene • Manuelle Indizierung • Index Sharding • Sandbox 18 Hibernate Search © 2009 Orientation in Objects GmbH 9 features (Proketion / Filter) Proketion properties statt „managed“ Objekte Filter Security Kategorien metadata SCORE DOCUMENT_ID BOOST ... Quelle: Hibernate Search in Action 19 Hibernate Search © 2009 Orientation in Objects GmbH Literaturhinweise • Hibernate Search in Action • Sprache: Englisch broschiert - 450 Seiten - Manning publications • Erscheinungsdatum: 28. Dezember 2008 ISBN: 1933988649 • Lucene in Action • Sprache: Engisch • broschiert - 456 Seiten - Manning publications • Erscheinungsdatum: 1. Dezember 2004 • ISBN: 1932394281 20 Hibernate Search © 2009 Orientation in Objects GmbH 10 Vielen Dank für Ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de [email protected] ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de [email protected] 11 Mehr von OIO zum Thema... • Schulung: Java Persistence API mit Hibernate – http://www.oio.de/seminar/java/seminar-hibernate-training-jpa-schulung.htm • Vortrag: Persistent mit Hibernate – http://www.oio.de/m/konf/jax2005/Persistenz_mit_Hibernate_final.pdf • Referenz: Richtiges Arbeiten mit Hibernate – http://www.oio.de/referenzen/competence-center/referenz-beratung-hibernateexpertenwissen.htm • Beratung zu JPA und Hibernate – http://www.oio.de/beratung-consulting/open-source-software/javaframeworks/hibernate-consulting.htm 23 Hibernate Search © 2009 Orientation in Objects GmbH 12