apache lucene + hibernate = hibernate search

22
PUT HE PROJECT NAME HERE PROJECT OVERVIEW [email protected] MAY 21, 2015

Upload: vitebsk-miniq

Post on 09-Aug-2015

133 views

Category:

Software


7 download

TRANSCRIPT

Page 1: Apache Lucene + Hibernate = Hibernate Search

PUT HE

PROJECT

NAME HERE

PROJECT OVERVIEW

[email protected]

MAY 21, 2015

Page 2: Apache Lucene + Hibernate = Hibernate Search

2CONFIDENTIAL

• Проблемы SQL-поиска

• Полнотекстовый поиск

• Apache Lucene

• Hibenate ORM

• Hibernate Search

Agenda

Page 3: Apache Lucene + Hibernate = Hibernate Search

3CONFIDENTIAL

ORM

JEE-приложение

JEE-приложение: Архитектура

POJO -

beans РСУБД

Page 4: Apache Lucene + Hibernate = Hibernate Search

4CONFIDENTIAL

JEE-приложение: Проблематика

Page 5: Apache Lucene + Hibernate = Hibernate Search

5CONFIDENTIAL

•Низкая производительность поисковых запросов;

•Поиск без учёта морфологии языка

•Нерелевантность результатов поиска;

•Поиск по множественным полям

•Перегруженность интерфейсов поисковых форм.

Проблемы SQL-поиска

Page 6: Apache Lucene + Hibernate = Hibernate Search

6CONFIDENTIAL

JEE-приложение: Проблематика

Page 7: Apache Lucene + Hibernate = Hibernate Search

7CONFIDENTIAL

JEE-приложение: Решение проблемы

Page 8: Apache Lucene + Hibernate = Hibernate Search

8CONFIDENTIAL

Полнотекстовый поиск - это лингвистический поиск в

текстовых данных в полнотекстовых индексах путем

обработки слов и фраз в соответствии с правилами

конкретного языка.

•Поддержка морфологии, неточный поиск;

•Высокая скорость поиска;

•Выдача результатов по релевантности;

•Игнорирование незначимых слов (стоп-слова).

Полнотекстовый поиск

Page 9: Apache Lucene + Hibernate = Hibernate Search

9CONFIDENTIAL

Apache Lucene

Java-библиотека, которая

предоставляет API для индексирования

и полнотекстового поиска документов

Основные фичи:

• Полнотекстовый поиск;

• Анализаторы для разных языков;

• Высокая производительность;

• Масштабируемость;

• Кроссплатформенность;

• Open Source;

• Поддержка других языков (C++,.NET, Python, Ruby)

Page 10: Apache Lucene + Hibernate = Hibernate Search

10CONFIDENTIAL

Object-relational mapping (ORM) – слой между СУБД и

объектной моделью приложения.

Hibernate: ORM

Page 11: Apache Lucene + Hibernate = Hibernate Search

11CONFIDENTIAL

• работа с POJO-объектами;

• природная модель ООП;

• высокая скорость разработки;

• возможности построения запросов (Criteria

API, HQL, JPAQL, native SQL);

• поддержка SQL диалектов;

Hibernate: Особенности

Page 12: Apache Lucene + Hibernate = Hibernate Search

12CONFIDENTIAL

SEARCH

ORM

JEE-приложение

Hibernate Search

POJO -

beans

РСУБД

Lucene -

индексы

hibernate.cfg.xml

Page 13: Apache Lucene + Hibernate = Hibernate Search

13CONFIDENTIAL

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-search-orm</artifactId>

<version>5.2.0.Final</version>

</dependency>

Hibernate Search: Maven

Page 14: Apache Lucene + Hibernate = Hibernate Search

14CONFIDENTIAL

// POJO-объект до добавления Hibernate Search - аннотаций

@Entity

public class Book {

@Id @GeneratedValue

private Integer id;

private String title;

private String subtitle;

@ManyToMany

private Set<Author> authors;

private Date publicationDate;

//public getters and setters

}

Hibernate Search: Mapping Entities

Page 15: Apache Lucene + Hibernate = Hibernate Search

15CONFIDENTIAL

// POJO-объект после добавления Hibernate Search - аннотаций

@Entity @Indexed

public class Book {

@Id @GeneratedValue @DocumentId

private Integer id;

@Field(analyze = Analyze.YES, store = Store.NO)

private String title;

private String subtitle;

@ManyToMany @IndexedEmbedded

private Set<Author> authors;

@Field(analyze = Analyze.NO, store = Store.YES)

@DateBridge(resolution = Resolution.DAY)

private Date publicationDate;

}

Hibernate Search: Mapping Entities

Page 16: Apache Lucene + Hibernate = Hibernate Search

16CONFIDENTIAL

FullTextSession fullTextSession = Search.getFullTextSession(session);

MassIndexer indexer = fullTextSession.createIndexer()

.purgeAllOnStart(true)

.optimizeOnFinish(true)

.batchSizeToLoadObjects(100)

.threadsToLoadObjects(10);

indexer.startAndWait(); // стартуем процесс индексации

Hibernate Search: Indexing

Page 17: Apache Lucene + Hibernate = Hibernate Search

17CONFIDENTIAL

FullTextSession fullTextSession = Search.getFullTextSession(session);

QueryBuilder queryBuilder = fullTextSession.getSearchFactory()

.buildQueryBuilder().forEntity(Book.class).get();

String userQuery = "что-то про страну чудес";

Query luceneQuery = queryBuilder.keyword()

.onFields("title", "subtitle", "authors.name")

.matching(userQuery)

.createQuery();

Hibernate Search: Searching

Page 18: Apache Lucene + Hibernate = Hibernate Search

18CONFIDENTIAL

FullTextQuery hibQuery =

fullTextSession.createFullTextQuery(luceneQuery, Book.class);

List result = hibQuery.list();

---

Book [id=1, title='Aлиса в стране чудес', authors=[Author

[id=1, name='Льюис Кэрролл']]

Book [id=3, title='Италия - страна чудес', authors=[Author

[id=2, name='Витторио Згарби']]

Hibernate Search: Searching

Page 19: Apache Lucene + Hibernate = Hibernate Search

19CONFIDENTIAL

https://github.com/DmitryKey/luke/releases

Hibernate Search: Luke

Полезная утилита, которая просто

необходима для отладки работы с

полнотекстовыми индексами.

Фичи:

• выполнения поиска

• просмотр результатов;

• удаление документов из индекса;

• изучение частоты встречаемости

термина, и многое другое..

Page 20: Apache Lucene + Hibernate = Hibernate Search

20CONFIDENTIAL

После внедрения полнотекстового поиска:

•Высокая скорость поиска;

•Неточный поиск;

•Специальные поисковые операторы для уточнения поиска;

• ???????

JEE-приложение: Benefits

•PROFIT

Page 21: Apache Lucene + Hibernate = Hibernate Search

21CONFIDENTIAL

Hibernate Search in Action. Emmanuel Bernard and

John Griffin

Hibernate Search by Example. Steve Perkins

Hibernate Search Documentation -

http://docs.jboss.org/hibernate/search/5.1/

Apache LuceneTM 5.1.0 Documentation -

http://lucene.apache.org/core/5_1_0/index.html

RTFM

Page 22: Apache Lucene + Hibernate = Hibernate Search

22CONFIDENTIAL

Вопросы?