Hibernate Search w praktyce

1 Hibernate Search w praktyceCzyli wyszukiwanie pełnoteks...
Author: Julitta Lenczewski
0 downloads 3 Views

1 Hibernate Search w praktyceCzyli wyszukiwanie pełnotekstowe w javowej aplikacji

2 Dobra wyszukiwarka Pomaga wyszukać właściwe wynikiPodpowiada 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 XMLeDodatkowy 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 RozmyteZ użyciem wildcardów Z użyciem dokładnej frazy Z wykorzystaniem zakresu Boolowskie Fasetowe

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

19 Tryby wyszukiwania Z użyciem słów kluczowych RozmyteZ 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 RozmyteZ 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 RozmyteZ 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 RozmyteZ 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 RozmyteZ 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 RozmyteZ 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 org.hibernate org.hibernate hibernate-search 4.5.0.Final

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ólPodstawowe zapytanie Projekcja

35 Demo time (1)

36 Poprawiamy wyniki wyszukiwania

37 Zwiększanie ważności wynikuKodujemy (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