1 / 40

Hibernate Search w praktyce

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.

cadee
Download Presentation

Hibernate Search w praktyce

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related