Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de info@oio.de Java, XML und Open Source seit 1998 ) Software Factory ) ) Object Rangers ) ) Competence Center) Schlüsselfertige Realisierung von Java Software Individualsoftware Pilot- und Migrationsprojekte Sanierung von Software Software Wartung Unterstützung laufender Java Projekte Perfect Match Rent-a-team Coaching on the project Inhouse Outsourcing Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen 2
Ihre Speaker Serge Ndong 3 Gliederung Einführung Vergleich SQL Suche, Volltextsuche Konfiguration Mapping Queries Ausblick 4
search try to find something by looking or otherwise seeking carefully and thoroughly Quelle: http://www.askoxford.com 5 Grenzen von SQL Wildcard und Wortsuche %hibernate% Approximation (oder Synonym) hybernate statt 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
Mismatch: Domain Modell - Lucene-Welt Kategorie name:string Domain Modell? Buch titel:string isbn:string autor1:string autor2:string Exemplar ausleihdatum:date Buch Dokument Lucene-Welt Titel: isbn: 1933988649 autor1: Emmanuel Bernard autor2: john Griffin exemplare. ausleihdatum:01.12:2008 exemplare. ausleihdatum:16.12:2008 7 Hibernate Eventsystem Synchron oder Asynchron Transparente Indizierung Objektstruktur in Indexstruktur Transfer verbindet Lucene mit Hibernate Hibernate Plattform Licence - LGPL verwendet Hibernate Core 8
Konfiguration Configuration by Exception 80% default Konfiguration hibernate.properties # Configuration hibernate.search.default.indexbase /users/application/indexes hibernate.cfg.xml <property name= hibernate.search.default.indexbase > /users/application/indexes </property> 9 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
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 Tokenized? String isbn; Speicherung von Daten im Index Eine Eigenschaft mehrfach Indizieren 11 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
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 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
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 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
Query Ausführungsschritte Ergebnisse aufbereiten Such-String Hibernate Search query Objekte laden Anfrage Persistence context Ergebnisdokumente Lucene index DB 17 Features Sortierung bei Felden statt bei der Relevanz Index.UN_TOKENIZED oder INDEX_NO_NORMS Natives Lucene Manuelle Indizierung Index Sharding Sandbox 18
features (Proketion / Filter) Proketion properties statt managed Objekte Filter Security Kategorien metadata SCORE DOCUMENT_ID BOOST... Quelle: in Action 19 Literaturhinweise 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
Vielen Dank für Ihre Aufmerksamkeit! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de info@oio.de??? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim? Fragen?? Version: 1.0 www.oio.de info@oio.de
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