Hibernate Search w praktyce - PowerPoint PPT Presentation

hibernate search w praktyce n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Hibernate Search w praktyce PowerPoint Presentation
Download Presentation
Hibernate Search w praktyce

play fullscreen
1 / 40
Hibernate Search w praktyce
150 Views
Download Presentation
cadee
Download Presentation

Hibernate Search w praktyce

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. HibernateSearch 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 wherex.yilike ‘%param%’;

  4. Proste wyszukiwanie

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

  6. Wyszukiwaniepełnotekstowe?

  7. Co wybrać? • Solr • ElasticSearch • HibernateSearch

  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. HibernateSearch • Co to jest? • Kiedy używać? • Dlaczego? • Jak?

  11. HibernateSearch = Lucene + komponenty SOLR + integracja z Hibernate

  12. Kiedy używać HibernateSearch?

  13. DlaczegoHibernateSearch? • 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) .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() .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().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. FacetingRequestcategoryFacetingRequest = queryBuilder.facet() .name("categoryFacet") .onField("category") .discrete() .orderedBy(FacetSortOrder.FIELD_VALUE) .includeZeroCounts(false) .createFacetingRequest(); hibernateQuery.getFacetManager() .enableFaceting(categoryFacetingRequest);

  31. Do dzieła

  32. <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. 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