Apache Lucene

Bom dia,

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?

Grato.

Bom dia,

O Hibernate Search é um framework moldado sobre o Lucene é pode ser uma boa alternativa, inclusive você poderá encontrar o livro Hibernate Search In Action.

Até!

Cara o problema é que não estou usando hibernate, uso JDBC puro mesmo.

Grato.

Tavez esse artigo possa ajudá-lo:
http://www.devmedia.com.br/post-4876-Alta-performance-na-indexacao-com-Apache-Lucene-Parte-I.html

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.

Qualquer dúvida estamos aí!

Nunca trabalhei com indexação de banco, seria um arquivo de texto separado?

Grato.

Estou estudando neste exato momento sobre isso. E estamos usando aqui o Sorl. Tem um livro bom sobre isso, o lucidworks for sorl.

[quote=clunsde]Estou estudando neste exato momento sobre isso. E estamos usando aqui o Sorl. Tem um livro bom sobre isso, o lucidworks for sorl.

[/quote]
Este Sorl é uma ferramenta para indexação?

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.

Então eu tenho que usar o Solr para gerar a minha indexação para depois usar o Lucene?

Grato.

Boa tarde.

Os indices eu conseguiur gerar, mais tenho uma dúvida…

A minha tabela tem os segintes campos:

ID | Título | Assunto

Tenho uma pesquisa que é feita pelo assunto. Para esta consulta eu deve indexar so o campo assunto, ou tenho que adicionar todos os outros?

grato.

Não necessariamente, você pode indexar o que vc achar mais importante, ou (na minha opinião é o mais indicado) Indexar os 3.
Veja esse exemplo:

[code]/*Etapa 1. Preparar dados para indexação. Extrair dados. */

String sender = properties.getProperty(“sender”);
String date = properties.getProperty(“date”);
String subject = properties.getProperty(“subject”);
String message = properties.getProperty(“message”);
String emaildoc = file.getAbsolutePath();

/* 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:

http://lucene.apache.org/solr/