74
Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura Orientador João Eduardo Ferreira

Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Integrando recuperação de informação em banco de dados com

Hibernate Search

Alunos

Gustavo Kendi Tsuji

Leonardo Tadashi Kamaura

Orientador

João Eduardo Ferreira

Page 2: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Introdução

Page 3: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Introdução

Page 4: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Introdução

Média de 305% decrescimento de

usuários na internet

Page 5: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Introdução

Média de 305% decrescimento de

usuários na internet=

Aumento do conteúdo na internet

produzido pelosusuários

Page 6: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Introdução

A Google registrou em 29 de julho de 2008 a marca de mais de 1 trilhão de páginas disponíveis para

consulta a partir do seu site de buscaGoogle's search index hits one trillion page mark

http://en.wikinews.org/wiki/Google%27s_search_index_hits_one_trillion_page_mark

Page 7: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Objetivos

• Estudar conceitos de Recuperação deInformação (RI);

Page 8: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Objetivos

• Estudar conceitos de Recuperação deInformação (RI);

• Integrar uma solução de RI no banco de dadosdo Projeto Colméia;

Page 9: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Visão Geral de RI

ArquivoInvertido

Query

Page 10: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Visão Geral de RI

ArquivoInvertido Modelo Vetorial

Query Ranqueamento

Page 11: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Visão Geral de RI

ArquivoInvertido Modelo Vetorial

Query Ranqueamento Resultados

Page 12: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Arquivo Invertido

Page 13: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Modelos

Page 14: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Modelo Vetorial

Query

Termo 1 Termo 2 Termo n

Documento

Palavra-chave 1

Palavra-chave 2

Palavra-chave n

Page 15: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene

• projeto de código aberto da Apache implementadoem Java

• gera índices que serão usados na busca

• não é um programa final de busca

• não depende da fonte dos dados

• portável (Perl, Python, C++, .NET, Ruby)

Page 16: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search

• Hibernate Annotations + Lucene

• busca full-text

Page 17: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate / Hibernate Annotations

Page 18: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate / Hibernate Annotations@Entity@Indexed@Table(name = "livro", schema = "public")‏public class Livro implements java.io.Serializable {

private Long idLivro;private String tituloOriginal;...

@Id

@DocumentId

@Column(name = "id_livro", nullable = false)‏

public Long getIdLivro() {return this.idLivro;

}

@Field(index=Index.TOKENIZED, store=Store.NO)‏

@Column(name = "titulo_original", length = 300)‏

public String getTituloOriginal() {return this.tituloOriginal;

}

Page 19: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate / Hibernate Annotations@Entity@Indexed

@Table(name = "livro", schema = "public")‏public class Livro implements java.io.Serializable {

private Long idLivro;private String tituloOriginal;...

@Id@DocumentId

@Column(name = "id_livro", nullable = false)‏public Long getIdLivro() {

return this.idLivro;}

@Field(index=Index.TOKENIZED, store=Store.NO)‏

@Column(name = "titulo_original", length = 300)‏public String getTituloOriginal() {

return this.tituloOriginal;}

Page 20: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate - Relacionamentos@Entity@Indexed@Table(name = "livro", schema = "public")‏public class Livro implements java.io.Serializable {

...private ItemAcervo itemAcervo;private Set<Subtitulo> subtitulos = new HashSet<Subtitulo>();...

@IndexedEmbedded

@OneToOne@PrimaryKeyJoinColumnpublic ItemAcervo getItemAcervo() {

return itemAcervo;}

@IndexedEmbedded

@OneToMany(fetch=FetchType.LAZY, mappedBy = "livro")‏public Set<Subtitulo> getSubtitulos() {

return subtitulos;}

Page 21: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search

Page 22: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search@Entity

@Indexed@Table(name = "livro", schema = "public")‏public class Livro implements java.io.Serializable {

private Long idLivro;private String tituloOriginal;...

@Id

@DocumentId@Column(name = "id_livro", nullable = false)‏public Long getIdLivro() {

return this.idLivro;}

@Field(index=Index.TOKENIZED, store=Store.NO)‏@Column(name = "titulo_original", length = 300)‏public String getTituloOriginal() {

return this.tituloOriginal;}

Page 23: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Relacionamentos@Entity@Indexed@Table(name = "livro", schema = "public")‏public class Livro implements java.io.Serializable {

...private ItemAcervo itemAcervo;private Set<Subtitulo> subtitulos = new HashSet<Subtitulo>();...

@IndexedEmbedded@OneToOne@PrimaryKeyJoinColumnpublic ItemAcervo getItemAcervo() {

return itemAcervo;}

@IndexedEmbedded@OneToMany(fetch=FetchType.LAZY, mappedBy = "livro")‏public Set<Subtitulo> getSubtitulos() {

return subtitulos;}

Page 24: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Relacionamentos@Entity@Table(name = "subtitulo", schema = "public")‏

@Embeddablepublic class Subtitulo implements java.io.Serializable {

private long idSubtitulo;private String subtitulo;private Livro livro;

@Id@Column(name = "id_subtitulo", nullable = false)‏public long getIdSubtitulo() {

return this.idSubtitulo;}

@Field(index=Index.TOKENIZED, store=Store.NO)‏@Column(name = "subtitulo", nullable = false, length = 100)‏public String getSubtitulo() {

return this.subtitulo;}

Page 25: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Utilizando Hibernate Search naAplicação

Page 26: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Processos

Back end

Aplicação

Hibernate

+

Hibernate Search

Índices

(Lucene)

Banco de dados

2

1

Page 27: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Processos

Page 28: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Processos

1

Page 29: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Processos

2

Page 30: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Indexação

Page 31: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

FullTextSession fullTextSession = Search.createFullTextSession(session);

Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}

tx.commit();

}

Page 32: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();FullTextSession fullTextSession = Search.createFullTextSession(session);

Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}

tx.commit();

}

Page 33: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

Hibernate

Session

Page 34: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

FullTextSession fullTextSession = Search.createFullTextSession(session);Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}

tx.commit();

}

Page 35: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

Hibernate

Session

Hibernate Search

FullTextSession Search

Page 36: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

FullTextSession fullTextSession = Search.createFullTextSession(session);

Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}

tx.commit(); }

Page 37: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

Banco de dados

Hibernate

Session

Transaction

Hibernate Search

FullTextSession Search

Page 38: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

FullTextSession fullTextSession = Search.createFullTextSession(session);

Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}tx.commit();

}

Page 39: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

Banco de dados

Hibernate

Session

Transaction

Hibernate Search

FullTextSession Search

Livros

Page 40: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

public void indexaLivros(){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

FullTextSession fullTextSession = Search.createFullTextSession(session);

Transaction tx = fullTextSession.beginTransaction();

List<?> livros = session.createCriteria(Livro.class).list();

for (Object livro : livros) {

fullTextSession.index(livro);

}tx.commit();

}

Page 41: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search - Indexação

Banco de dados

Hibernate

Session

Transaction

Hibernate Search

FullTextSession Search

Livros

Page 42: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Busca

Page 43: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome",

"livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 44: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome",

"livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 45: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Query

Termo

Page 46: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome",

"livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 47: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Query

Termo Parâmetros

Page 48: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 49: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Query

Termo Parâmetros Fields

Page 50: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 51: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Lucene

StopAnalyser

Query

Termo Parâmetros Fields

Page 52: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, newStopAnalyzer());org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 53: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Lucene

MultiFieldQueryParserStopAnalyser

Query

Termo Parâmetros Fields

Page 54: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);

}

Page 55: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Lucene

MultiFieldQueryParserStopAnalyser Query

Query

Termo Parâmetros Fields

Page 56: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);return ajustaPaginacao(session, indice, maximo);

}

Page 57: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Lucene

MultiFieldQueryParserStopAnalyser Query

Hibernate Search

FullTextQuery

Query

Termo Parâmetros Fields

Page 58: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

public List<Livro> buscaLivro(String termo, int indice, int maximo) throws Exception {

String[] fields = {"tituloOriginal", "subtitulos.subtitulo", "livrosAutores.autor.nome ", "livroEditoraCidade.editora.editora", "assuntosDedalus"};

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StopAnalyzer());

org.apache.lucene.search.Query luceneQuery = null;

try {

luceneQuery = parser.parse(termo);

} catch (ParseException e) {

e.printStackTrace();

}

org.hibernate.search.FullTextQuery fullTextQuery =

fullTextSession.createFullTextQuery( luceneQuery , Livro.class);

return ajustaPaginacao(session, indice, maximo);}

Page 59: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Hibernate Search – Busca

Lucene

MultiFieldQueryParserStopAnalyser Query

Hibernate Search

FullTextQuery

Query

Termo Parâmetros Fields

Livros

Page 60: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Score

Page 61: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

• É uma combinação do Modelo de Espaço Vetorial e doModelo Booleano.

• O score de uma query q para um documento d correlaciona à distância do coseno ou ao produto escalar entre vetores de documentos e queries no Modelo de Espaço Vetorial.

dt

dt,normgetBoostttidfdttfdq,queryNormdq,coord=dq,scorein

2.in

Fórmula:

Page 62: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

dt,normgetBoostttidfdq,queryNormdq,coord=dq,scorein

2.d in ttf

Page 63: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

dt,normgetBoosttdttfdq,queryNormdq,coord=dq,scorein

.in 2tidf

Page 64: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

dt,normgetBoostttidfdttfdq,queryNorm=dq,scorein

2.in dq,coord

Page 65: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

dt,normgetBoostttidfdttfdq,coord=dq,scorein

2.in dq,queryNorm

Page 66: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

dt,normtidfdttfdq,queryNormdq,coord=dq,scorein

2in t.getBoost

Page 67: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

tf(t in d): term frequencyO número de vezes que o termo t ocorre no documento d

idf(t in d): inverse document frequencyO número de documentos que contêm o termo t

coord(q, d): fatorbaseado na quantidade de termos da query q que são encontrados no documento d

queryNorm(q, d): fator de normalizaçãousada para permitir a comparação entre os scores das queries

t.getBoost():atribui peso para o termo t na query q em tempo de busca

norm(t, d):encapsula alguns fatores de boost em tempo de indexação

dt

getBoostttidfdttfdq,queryNormdq,coord=dq,scorein

2.in dt,norm

Page 68: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

Query: Information RetrievalResultado: Information analysis and retrieval4.734231 = (MATCH) sum of:1.9067632 = (MATCH) weight(tituloOriginal:information in 2099), product of:0.6346345 = queryWeight(tituloOriginal:information), product of:

6.009012 = idf(docFreq=36, numDocs=5541)‏0.105613776 = queryNorm

3.004506 = (MATCH) fieldWeight(tituloOriginal:information in 2099), product of:1.0 = tf(termFreq(tituloOriginal:information)=1)‏6.009012 = idf(docFreq=36, numDocs=5541)‏0.5 = fieldNorm(field=tituloOriginal, doc=2099)‏

2.8274677 = (MATCH) weight(tituloOriginal:retrieval in 2099), product of:0.7728124 = queryWeight(tituloOriginal:retrieval), product of:

7.317345 = idf(docFreq=9, numDocs=5541)‏0.105613776 = queryNorm

3.6586726 = (MATCH) fieldWeight(tituloOriginal:retrieval in 2099), product of:1.0 = tf(termFreq(tituloOriginal:retrieval)=1)‏7.317345 = idf(docFreq=9, numDocs=5541)‏0.5 = fieldNorm(field=tituloOriginal, doc=2099)‏

Page 69: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

Score4.734231

Weight

Information

1.9067632

Weight

Retrieval

2.8274677

Query: tituloOriginal: Information RetrievalResultado: Information analysis and retrieval

Page 70: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

Weight

1.9067632

queryWeight

0.6346345

Idf

6.009012

queryNorm

0.105613776

fieldWeight

3.004506

Idf

6.009012

Tf

1.0

fieldNorm

0.5

Information

Page 71: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Lucene - Score

Information Retrieval

Score Weight QueryWeight

Field Weight

Weight QueryWeight

Field Weight

R1 4.734231 1.9067632 0.6346345 3.004506 2.8274677 0.7728124 3.6586726

R2 3.550673 1.4300724 0.6346345 2.2533796 2.1206007 0.7728124 2.7440045

R3 1.4137338 2.8274677 0.7728124 3.6586726

Query: Information RetrievalR1: Information analysis and retrievalR2: Information storage and retrieval: tools, elements, theoriesR3: The SMART retrieval system

Page 72: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Resultados

Page 73: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Resultados

Query: assunto:banco de dados AND titulo:database*

Livros encontrados: 125 livros

Hibernate sem indexação:

media: 89 ms

Hibernate com indexação:

media: 13 ms

Page 74: Integrando recuperação de informação em banco …Integrando recuperação de informação em banco de dados com Hibernate Search Alunos Gustavo Kendi Tsuji Leonardo Tadashi Kamaura

Resultados

Query: assunto:matematica*

Livros encontrados: 4763 livros

Hibernate sem indexação:

media: 730 ms

Hibernate com indexação:

media: 265 ms