Hibernate Search w praktyce

Slides:



Advertisements
Podobne prezentacje
Zastosowanie LDAP w obsłudze katalogów bibliotecznych
Advertisements

Hibernate zapytania.
Rafał Hryniów Tomasz Pieciukiewicz
Object-Relational Mapper for PHP
INDEKSY I SORTOWANIE ZEWNĘTRZNE
Generics w .NET 2.0 Łukasz Rzeszot.
Biblioteka Uniwersytecka w Warszawie Czerwca 2011
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Implementacja ekstensji klasy
WPROWADZENIE DO BAZ DANYCH
XML w integracji aplikacji
Marcin Pamuła Mateusz Stefek
OPERATORY WYSZUKIWAWCZE
Wyszukiwanie zaawansowane w środowisku internetowym Maja Wilczewska-Wojczyszyn.
Promotor: prof. dr hab. Włodzisław Duch
Kurs Pascala – spis treści
WekaSQL Język i aplikacja przetwarzania oraz eksploracji danych.
Wprowadzenie do wyszukiwania Wyszukiwarki Internetowe.
Metody wyszukiwania informacji
Wprowadzenie do budowy usług informacyjnych
Katalog komputerowy WebPac
Archiwizacja oraz szybkie wyszukiwanie wiadomości
Zapytania SQL: wydajność i optymalizacja
Wykład 8 Wojciech Pieprzyca
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Modele baz danych - spojrzenie na poziom fizyczny
Google – sposoby wyszukiwania
Odwzorowania relacyjno-obiektowe Hibernate zapytania.
Multimedialne bazy danych
Bibliografia Geologiczna Polski Baza danych
Autor: Maciej Piwowarczyk
Autor: Maciej Piwowarczyk
Structured Query Language
Teoria relacyjnych baz danych
Strategia skutecznego szukania informacji w Internecie
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
O technologiach dla języka Java okiem Mariusza Lipińskiego lipinski.pl 20 stycznia 2009 Coś między ORM a JDBC czyli Apache iBATIS Data.
Projektowanie architektury informacji katalogu biblioteki w oparciu o badania użytkowników Analiza przypadku dr Stanisław Skórka Biblioteka Główna Instytut.
Efektywne wyszukiwanie informacji w Internecie by Katarzyna Wilk is licensed under a Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów.
System e-zamówienia.
Tabele historyczne w PostgreSQL
SQL - Structured Query Language
Tworzenie aplikacji webowych w oparciu o framework ObjectLedge
Zarządzanie informacją
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
1 Każdy obiekt jest scharakteryzowany poprzez: tożsamość – daje się jednoznacznie wyróżnić; stan; zachowanie. W analizie obiektowej podstawową strukturą
Indeksowanie danych w katalogu bibliotecznym
Podstawowe informacje o bibliotekach cyfrowych Henryk Hollender Wyższa Szkoła Handlu i Prawa im. R. Łazarskiego.
Opracowała T. Głuszak Nauczyciel bibliotekarz Zespołu Szkół w Dydni.
Wyszukiwanie informacji w internecie
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Diagram klas Kluczowymi elementami są: klasy (class)
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Informatyka – szkoła gimnazjalna – Scholaris - © DC Edukacja Wyszukiwanie danych w programie Access Informatyka.
Ukryty Internet (Web).
Hibernate Podstawy.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Portal edukacyjny A.Ś. Tworzenie kwerend w programie Access.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Testowanie wydajnościowe Metody testowania Apache Jmeter Serwer Jboss Baza danych PostgreSQL Testowanie wydajności odczytu z bazy danych Testowanie wydajności.
Sieci komputerowe Usługi sieciowe 27/09/2002.
Strukturalny język zapytań SQL - historia
między starymi a nowymi czasami
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Hibernate Search w praktyce Czyli wyszukiwanie pełnotekstowe w javowej aplikacji

Dobra wyszukiwarka Pomaga wyszukać właściwe wyniki Podpowiada Domyśla się intencji użytkownika Jest odporna na literówki „Wie” czego szukamy

Proste wyszukiwanie select * from x where x.y ilike ‘%param%’;

Proste wyszukiwanie Zalety Wady Łatwo zaimplementować Każdy wynik jest równorzędny Niewydajne przy dużych zbiorach Źle zaimplementowane dostarczy mylnych wyników

Większa trafność wyników? Ok! Bardziej złożony algorytm Metadane Kategorie Tagi

Wyszukiwanie pełnotekstowe?

Co wybrać? Solr ElasticSearch Hibernate Search

Solr? Zapytania za pośrednictwem żądań HTTP XMLe, wszędzie XMLe Dodatkowy serwer SOLR Reguły indeksowania odseparowane od definicji obiektów domenowych

SOLR do PoC-owania?

Hibernate Search Co to jest? Kiedy używać? Dlaczego? Jak?

Hibernate Search = Lucene + komponenty SOLR + integracja z Hibernate

Kiedy używać Hibernate Search?

Dlaczego Hibernate Search? Integracja indeksów Lucene z operacjami w Hibernate Pracujemy na obiektach Bajecznie prosta integracja z aplikacją korzystającą z Hibernate

Zalety?

Przyjazny DSL Wiele trybów wyszukiwania Procesory Warunkowe indeksowanie

Przyjazny DSL org.hibernate.search.query.dsl.QueryBuilder queryBuilder = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity( MyClass.class ) .get();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

org.apache.lucene.search.Query luceneQuery = queryBuilder .keyword() .onFields("someField", "otherField") .matching(providedValues) .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

luceneQuery = queryBuilder. keyword(). fuzzy(). withThreshold(0. 7f) luceneQuery = queryBuilder .keyword() .fuzzy() .withThreshold(0.7f) .onFields("someField", "otherField") .matching(providedValues) .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

Z wildcardami luceneQuery = queryBuilder .keyword() .wildcard() .onField("someField") .andField ("otherField") .matching(providedValues) .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

luceneQuery = queryBuilder. withSlop(intValue). phrase() luceneQuery = queryBuilder .withSlop(intValue) .phrase() .onField("someField") .andField("otherField") .sentence(unquotedSearchString) .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

luceneQuery = queryBuilder .range() .onField(numericField) .above(x) .below(x) .from(x) .to(y) .excludeLimit() .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

luceneQuery = queryBuilder. bool(). must( queryBuilder. keyword() luceneQuery = queryBuilder .bool() .must( queryBuilder.keyword().onField("someField") .matching(someValue).createQuery() ) .not() .should( queryBuilder.range().onField("otherField") .above(intValue).createQuery() .createQuery();

Tryby wyszukiwania Z użyciem słów kluczowych Rozmyte Z użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

FacetingRequest categoryFacetingRequest = queryBuilder.facet() .name("categoryFacet") .onField("category") .discrete() .orderedBy(FacetSortOrder.FIELD_VALUE) .includeZeroCounts(false) .createFacetingRequest(); hibernateQuery.getFacetManager() .enableFaceting(categoryFacetingRequest);

Do dzieła

<groupId>org.hibernate</groupId> … <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search</artifactId> <version>4.5.0.Final</version> </dependency>

A potem już z górki Implementacja Pól Analizatorów Zapytań Warunków indeksowania

Kodujemy (1) Prosta wyszukiwarka pełnotekstowa Mapowanie wybranych pól Podstawowe zapytanie Projekcja

Demo time (1)

Poprawiamy wyniki wyszukiwania

Zwiększanie ważności wyniku Kodujemy (2) Zwiększanie ważności wyniku Statyczne Dynamiczne Na czas zapytania Warunkowe indeksowanie Analizator

Demo time (2)

Co dalej? Projekcje (zagadnienia zaawansowane) Wydajność Fasetowe wyszukiwanie Filtry na zapytania …

Q&A time