Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Hibernate Search w praktyce
Czyli wyszukiwanie pełnotekstowe w javowej aplikacji
2
Dobra wyszukiwarka Pomaga wyszukać właściwe wyniki
Podpowiada Domyśla się intencji użytkownika Jest odporna na literówki „Wie” czego szukamy
3
Proste wyszukiwanie select * from x where x.y ilike ‘%param%’;
4
Proste wyszukiwanie Zalety Wady Łatwo zaimplementować
Każdy wynik jest równorzędny Niewydajne przy dużych zbiorach Źle zaimplementowane dostarczy mylnych wyników
5
Większa trafność wyników? Ok!
Bardziej złożony algorytm Metadane Kategorie Tagi
6
Wyszukiwanie pełnotekstowe?
7
Co wybrać? Solr ElasticSearch Hibernate Search
8
Solr? Zapytania za pośrednictwem żądań HTTP XMLe, wszędzie XMLe
Dodatkowy serwer SOLR Reguły indeksowania odseparowane od definicji obiektów domenowych
9
SOLR do PoC-owania?
10
Hibernate Search Co to jest? Kiedy używać? Dlaczego? Jak?
11
Hibernate Search = Lucene + komponenty SOLR + integracja z Hibernate
12
Kiedy używać Hibernate Search?
13
Dlaczego Hibernate Search?
Integracja indeksów Lucene z operacjami w Hibernate Pracujemy na obiektach Bajecznie prosta integracja z aplikacją korzystającą z Hibernate
14
Zalety?
15
Przyjazny DSL Wiele trybów wyszukiwania Procesory Warunkowe indeksowanie
16
Przyjazny DSL org.hibernate.search.query.dsl.QueryBuilder queryBuilder = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity( MyClass.class ) .get();
17
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
18
org.apache.lucene.search.Query
luceneQuery = queryBuilder .keyword() .onFields("someField", "otherField") .matching(providedValues) .createQuery();
19
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
20
luceneQuery = queryBuilder. keyword(). fuzzy(). withThreshold(0. 7f)
luceneQuery = queryBuilder .keyword() .fuzzy() .withThreshold(0.7f) .onFields("someField", "otherField") .matching(providedValues) .createQuery();
21
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
22
Z wildcardami luceneQuery = queryBuilder .keyword() .wildcard() .onField("someField") .andField ("otherField") .matching(providedValues) .createQuery();
23
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
24
luceneQuery = queryBuilder. withSlop(intValue). phrase()
luceneQuery = queryBuilder .withSlop(intValue) .phrase() .onField("someField") .andField("otherField") .sentence(unquotedSearchString) .createQuery();
25
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
26
luceneQuery = queryBuilder .range() .onField(numericField) .above(x) .below(x) .from(x) .to(y) .excludeLimit() .createQuery();
27
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
28
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();
29
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
30
FacetingRequest categoryFacetingRequest =
queryBuilder.facet() .name("categoryFacet") .onField("category") .discrete() .orderedBy(FacetSortOrder.FIELD_VALUE) .includeZeroCounts(false) .createFacetingRequest(); hibernateQuery.getFacetManager() .enableFaceting(categoryFacetingRequest);
31
Do dzieła
32
<groupId>org.hibernate</groupId>
… <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search</artifactId> <version>4.5.0.Final</version> </dependency>
33
A potem już z górki Implementacja Pól Analizatorów Zapytań
Warunków indeksowania
34
Kodujemy (1) Prosta wyszukiwarka pełnotekstowa Mapowanie wybranych pól
Podstawowe zapytanie Projekcja
35
Demo time (1)
36
Poprawiamy wyniki wyszukiwania
37
Zwiększanie ważności wyniku
Kodujemy (2) Zwiększanie ważności wyniku Statyczne Dynamiczne Na czas zapytania Warunkowe indeksowanie Analizator
38
Demo time (2)
39
Co dalej? Projekcje (zagadnienia zaawansowane) Wydajność
Fasetowe wyszukiwanie Filtry na zapytania …
40
Q&A time
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.