Estou fazendo uma aplicação web para um jornal e vou ter que fazer uma pesquisa no texto de cada jornal.
Como a base é muito grande, comecei a ter problema de desempenho usando a clausula “LIKE ‘%texto%’”.
Então comecei a estudar o Lucene para aperfeiçoar minhas pesquisas, mas não achei nenhum exemplo de fazer isso usando banco de dados.
Alguém que já trabalhou com isso poderia me indicar algum tutorial ou artigo?
O Hibernate Search é um framework moldado sobre o Lucene é pode ser uma boa alternativa, inclusive você poderá encontrar o livro Hibernate Search In Action.
Cara, com o Lucene puro mesmo dá pra indexar toda a base de dados.
Aí sempre que vc for salvar ou atualizar um registro no bd… vc atualiza o índice tb, só tem que tomar cuidado pra manter a sincronia dos dois, ou não, dependendo da necessidade.
Falae! Você consegue encontrar o Livro “Lucene In Action” fácil no Amazon. O lucene é mt tranquilo.
Se a sua app tiver a necessidade de rodar em ambiente distribuído acho que o Lucene não te atende pois ele sobe como um Jar da app. AI você pode usar o Apache Solr que é parecido mas roda como uma web app ai é só uppar pro seu web server.
Sim, é um arquivo binário separado, onde fica os índices gerados a partir dos registros do banco de dados. A documentação do Lucene é bastante completa.
Na verdade o projeto citado chama-se Solr (é, sou chato mesmo), eu ainda não tive tempo de estudar ele a fundo, mas tem feito muito sucesso, parece que é uma camada de abstração acima do Lucene. Só ouço elogios, então, acho que vale a pena estudá-lo também.
Sim o Solr vem num arquivo JAR, eu utilizo aqui na empresa com o Liferay(Ferramenta de Portal), ele idexa todos os conteúdos dos Portais e o resultado é bastante satisfatório.
/* Etapa 2. Agrupar dados nos Campos e incluí-los em um Documento */
Field senderField =
new Field(“sender”,sender,Field.Store.YES,Field.Index.NOT_ANALYZED);
Field emaildatefield =
new Field(“date”,date,Field.Store.NO,Field.Index.NOT_ANALYZED);
Field subjectField =
new Field(“subject”,subject,Field.Store.YES,Field.Index.ANALYZED);
Field messagefield =
new Field(“message”,message,Field.Store.NO,Field.Index.ANALYZED);
Field emailDocField =
new Field(“emailDoc”,emaildoc,Field.Store.YES,
Field.Index.NO);
Document doc = new Document();
// Incluir esses campos em um Documento Lucene
doc.add(senderField);
doc.add(emaildatefield);
doc.add(subjectField);
doc.add(messagefield);
doc.add(emailDocField);
//Etapa 3: Incluir esse documento no Índice Lucene.
indexWriter.addDocument(doc);
[/code]
Aqui quase todo o email é indexado. Exeto o documento.
Isso deixa mais optimizado sua aplicação.
[quote=fernandosc]Então eu tenho que usar o Solr para gerar a minha indexação para depois usar o Lucene?
Grato.[/quote]
Não é bem assim. Grosso modo, o solr “embute” o lucene, adiciona uma série de recursos em cima dele, e adiciona uma interface REST para acesso. Ao usar o solr, automaticamente vc já está usando o lucene. Dá uma olhada no site: