SlideShare a Scribd company logo
PUT HE
PROJECT
NAME HERE
PROJECT OVERVIEW
Siargei_Samsonau@epam.com
MAY 21, 2015
2CONFIDENTIAL
• Проблемы SQL-поиска
• Полнотекстовый поиск
• Apache Lucene
• Hibenate ORM
• Hibernate Search
Agenda
3CONFIDENTIAL
ORM
JEE-приложение
JEE-приложение: Архитектура
POJO -
beans РСУБД
4CONFIDENTIAL
JEE-приложение: Проблематика
5CONFIDENTIAL
•Низкая производительность поисковых запросов;
•Поиск без учёта морфологии языка
•Нерелевантность результатов поиска;
•Поиск по множественным полям
•Перегруженность интерфейсов поисковых форм.
Проблемы SQL-поиска
6CONFIDENTIAL
JEE-приложение: Проблематика
7CONFIDENTIAL
JEE-приложение: Решение проблемы
8CONFIDENTIAL
Полнотекстовый поиск - это лингвистический поиск в
текстовых данных в полнотекстовых индексах путем
обработки слов и фраз в соответствии с правилами
конкретного языка.
•Поддержка морфологии, неточный поиск;
•Высокая скорость поиска;
•Выдача результатов по релевантности;
•Игнорирование незначимых слов (стоп-слова).
Полнотекстовый поиск
9CONFIDENTIAL
Apache Lucene
Java-библиотека, которая
предоставляет API для индексирования
и полнотекстового поиска документов
Основные фичи:
• Полнотекстовый поиск;
• Анализаторы для разных языков;
• Высокая производительность;
• Масштабируемость;
• Кроссплатформенность;
• Open Source;
• Поддержка других языков (C++,.NET, Python, Ruby)
10CONFIDENTIAL
Object-relational mapping (ORM) – слой между СУБД и
объектной моделью приложения.
Hibernate: ORM
11CONFIDENTIAL
• работа с POJO-объектами;
• природная модель ООП;
• высокая скорость разработки;
• возможности построения запросов (Criteria
API, HQL, JPAQL, native SQL);
• поддержка SQL диалектов;
Hibernate: Особенности
12CONFIDENTIAL
SEARCH
ORM
JEE-приложение
Hibernate Search
POJO -
beans
РСУБД
Lucene -
индексы
hibernate.cfg.xml
13CONFIDENTIAL
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>5.2.0.Final</version>
</dependency>
Hibernate Search: Maven
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
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
16CONFIDENTIAL
FullTextSession fullTextSession = Search.getFullTextSession(session);
MassIndexer indexer = fullTextSession.createIndexer()
.purgeAllOnStart(true)
.optimizeOnFinish(true)
.batchSizeToLoadObjects(100)
.threadsToLoadObjects(10);
indexer.startAndWait(); // стартуем процесс индексации
Hibernate Search: Indexing
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
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
19CONFIDENTIAL
https://github.com/DmitryKey/luke/releases
Hibernate Search: Luke
Полезная утилита, которая просто
необходима для отладки работы с
полнотекстовыми индексами.
Фичи:
• выполнения поиска
• просмотр результатов;
• удаление документов из индекса;
• изучение частоты встречаемости
термина, и многое другое..
20CONFIDENTIAL
После внедрения полнотекстового поиска:
• Высокая скорость поиска;
• Неточный поиск;
• Специальные поисковые операторы для уточнения поиска;
• ???????
JEE-приложение: Benefits
• PROFIT
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
22CONFIDENTIAL
Вопросы?

More Related Content

Viewers also liked (20)

PPT
Ejb in java. part 1.
Asya Dudnik
 
PDF
TNAPS 3 Installation
tncor
 
PDF
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Омские ИТ-субботники
 
PPTX
Новые возможности поиска в SharePoint 2013
Vitaly Zhukov
 
PPTX
Splunk overview Russian
Timur Bagirov
 
PDF
Turnkey Ecommerce - Олег Чеховский
meet_magento
 
PDF
Иван Тимофев, HP. Архивация баз данных и миграция устаревших приложений cиспо...
IBS
 
PPTX
Системы дискавери (Discovery) в библиотеках: анализ рынка и сравнение продуктов
Alexey Skalaban
 
PDF
Lecture 5 JSTL, custom tags, maven
Fahad Golra
 
PDF
Lecture 6 Web Sockets
Fahad Golra
 
PDF
Lecture 2: Servlets
Fahad Golra
 
PDF
Lecture 9 - Java Persistence, JPA 2
Fahad Golra
 
PDF
Lecture 10 - Java Server Faces (JSF)
Fahad Golra
 
PDF
Lecture 7 Web Services JAX-WS & JAX-RS
Fahad Golra
 
PDF
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Fahad Golra
 
PDF
Lecture 3: Servlets - Session Management
Fahad Golra
 
PDF
Tutorial 4 - Basics of Digital Photography
Fahad Golra
 
PDF
Enterprise Java Beans - EJB
Peter R. Egli
 
PPT
EJB .
ayyagari.vinay
 
PDF
Lecture 1: Introduction to JEE
Fahad Golra
 
Ejb in java. part 1.
Asya Dudnik
 
TNAPS 3 Installation
tncor
 
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Омские ИТ-субботники
 
Новые возможности поиска в SharePoint 2013
Vitaly Zhukov
 
Splunk overview Russian
Timur Bagirov
 
Turnkey Ecommerce - Олег Чеховский
meet_magento
 
Иван Тимофев, HP. Архивация баз данных и миграция устаревших приложений cиспо...
IBS
 
Системы дискавери (Discovery) в библиотеках: анализ рынка и сравнение продуктов
Alexey Skalaban
 
Lecture 5 JSTL, custom tags, maven
Fahad Golra
 
Lecture 6 Web Sockets
Fahad Golra
 
Lecture 2: Servlets
Fahad Golra
 
Lecture 9 - Java Persistence, JPA 2
Fahad Golra
 
Lecture 10 - Java Server Faces (JSF)
Fahad Golra
 
Lecture 7 Web Services JAX-WS & JAX-RS
Fahad Golra
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Fahad Golra
 
Lecture 3: Servlets - Session Management
Fahad Golra
 
Tutorial 4 - Basics of Digital Photography
Fahad Golra
 
Enterprise Java Beans - EJB
Peter R. Egli
 
Lecture 1: Introduction to JEE
Fahad Golra
 

Similar to Apache Lucene + Hibernate = Hibernate Search (20)

PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Stas Vyschepan
 
PDF
Spring the Ripper by Evgeny Borisov
JavaDayUA
 
PDF
Виталий Каторгин, Wamba
Ontico
 
PDF
Индексируй неиндексирумое
Alexander Byndyu
 
PDF
И снова разработка под iOS. Павел Тайкало
Stanfy
 
PPTX
Python Meetup
iQSpace
 
PPTX
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
PPTX
Поисковое продвижение - Михаил Федоринин
MyAcademy
 
PDF
Databases on Client Side
Ecommerce Solution Provider SysIQ
 
PDF
C# Web. Занятие 04.
Igor Shkulipa
 
PPTX
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
Andrey Rebrov
 
PDF
C# Desktop. Занятие 13.
Igor Shkulipa
 
PPT
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov
 
PPTX
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Denis Tsvettsih
 
PDF
Использование Wiki-системы большой командой для управления БА информацией
Denis Dniprovskiy
 
PPTX
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
 
PPTX
IOP202 DevCon 2012 Apache Lucene in Windows Azure
Vadim Novitskiy
 
PDF
Squeek 1
Oleg Parinov
 
PDF
Анализ проблем сайта. Обзор инструментов. - Внутренняя оптимизация сайтов с I...
IBSchool Интернет-Бизнес школа
 
PDF
Один день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Сбертех | SberTech
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Stas Vyschepan
 
Spring the Ripper by Evgeny Borisov
JavaDayUA
 
Виталий Каторгин, Wamba
Ontico
 
Индексируй неиндексирумое
Alexander Byndyu
 
И снова разработка под iOS. Павел Тайкало
Stanfy
 
Python Meetup
iQSpace
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Поисковое продвижение - Михаил Федоринин
MyAcademy
 
Databases on Client Side
Ecommerce Solution Provider SysIQ
 
C# Web. Занятие 04.
Igor Shkulipa
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
Andrey Rebrov
 
C# Desktop. Занятие 13.
Igor Shkulipa
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Denis Tsvettsih
 
Использование Wiki-системы большой командой для управления БА информацией
Denis Dniprovskiy
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
Vadim Novitskiy
 
Squeek 1
Oleg Parinov
 
Анализ проблем сайта. Обзор инструментов. - Внутренняя оптимизация сайтов с I...
IBSchool Интернет-Бизнес школа
 
Один день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Сбертех | SberTech
 
Ad

More from Vitebsk Miniq (20)

PDF
Runtime compilation and code execution in groovy
Vitebsk Miniq
 
PDF
The 5 Laws of Software Estimates
Vitebsk Miniq
 
PDF
Latest & Greatest Observability Release 7.9
Vitebsk Miniq
 
PDF
Тестирование Spring-based приложений
Vitebsk Miniq
 
PDF
Семантический поиск - что это, как работает и чем отличается от просто поиска
Vitebsk Miniq
 
PDF
Локализационное тестирование - это не только перевод
Vitebsk Miniq
 
PDF
ISTQB Сертификация тестировщиков: быть или не быть?
Vitebsk Miniq
 
PDF
Apollo GraphQL Federation
Vitebsk Miniq
 
PDF
Who is a functional tester
Vitebsk Miniq
 
PDF
Crawling healthy
Vitebsk Miniq
 
PDF
Вперед в прошлое
Vitebsk Miniq
 
PDF
CloudFormation experience
Vitebsk Miniq
 
PDF
Learning Intelligence: the story of mine
Vitebsk Miniq
 
PDF
Как программисты могут спасти мир
Vitebsk Miniq
 
PDF
Использование AzureDevOps при разработке микросервисных приложений
Vitebsk Miniq
 
PDF
Distributed tracing system in action. Instana Tracing.
Vitebsk Miniq
 
PDF
Насорил - убери!
Vitebsk Miniq
 
PDF
Styled-components. Что? Когда? И зачем?
Vitebsk Miniq
 
PDF
Красные флаги и розовые очки
Vitebsk Miniq
 
PDF
CSS. Практика
Vitebsk Miniq
 
Runtime compilation and code execution in groovy
Vitebsk Miniq
 
The 5 Laws of Software Estimates
Vitebsk Miniq
 
Latest & Greatest Observability Release 7.9
Vitebsk Miniq
 
Тестирование Spring-based приложений
Vitebsk Miniq
 
Семантический поиск - что это, как работает и чем отличается от просто поиска
Vitebsk Miniq
 
Локализационное тестирование - это не только перевод
Vitebsk Miniq
 
ISTQB Сертификация тестировщиков: быть или не быть?
Vitebsk Miniq
 
Apollo GraphQL Federation
Vitebsk Miniq
 
Who is a functional tester
Vitebsk Miniq
 
Crawling healthy
Vitebsk Miniq
 
Вперед в прошлое
Vitebsk Miniq
 
CloudFormation experience
Vitebsk Miniq
 
Learning Intelligence: the story of mine
Vitebsk Miniq
 
Как программисты могут спасти мир
Vitebsk Miniq
 
Использование AzureDevOps при разработке микросервисных приложений
Vitebsk Miniq
 
Distributed tracing system in action. Instana Tracing.
Vitebsk Miniq
 
Насорил - убери!
Vitebsk Miniq
 
Styled-components. Что? Когда? И зачем?
Vitebsk Miniq
 
Красные флаги и розовые очки
Vitebsk Miniq
 
CSS. Практика
Vitebsk Miniq
 
Ad

Apache Lucene + Hibernate = Hibernate Search