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.
Até!
F
fernandosc
Cara o problema é que não estou usando hibernate, uso JDBC puro mesmo.
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.
Leonardo_Gloria
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í!
F
fernandosc
Nunca trabalhei com indexação de banco, seria um arquivo de texto separado?
Grato.
clunsde
Estou estudando neste exato momento sobre isso. E estamos usando aqui o Sorl. Tem um livro bom sobre isso, o lucidworks for sorl.
F
fernandosc
clunsde:
Estou estudando neste exato momento sobre isso. E estamos usando aqui o Sorl. Tem um livro bom sobre isso, o lucidworks for sorl.
Este Sorl é uma ferramenta para indexação?
foxpv
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.
Leonardo_Gloria
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.
F
fernandosc
Então eu tenho que usar o Solr para gerar a minha indexação para depois usar o Lucene?
Grato.
F
fernandosc
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.
gpzim98
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:
/*Etapa 1. Preparar dados para indexação. Extrair dados. */Stringsender=properties.getProperty("sender");Stringdate=properties.getProperty("date");Stringsubject=properties.getProperty("subject");Stringmessage=properties.getProperty("message");Stringemaildoc=file.getAbsolutePath();/* Etapa 2. Agrupar dados nos Campos e incluí-los em um Documento */FieldsenderField=newField("sender",sender,Field.Store.YES,Field.Index.NOT_ANALYZED);Fieldemaildatefield=newField("date",date,Field.Store.NO,Field.Index.NOT_ANALYZED);FieldsubjectField=newField("subject",subject,Field.Store.YES,Field.Index.ANALYZED);Fieldmessagefield=newField("message",message,Field.Store.NO,Field.Index.ANALYZED);FieldemailDocField=newField("emailDoc",emaildoc,Field.Store.YES,Field.Index.NO);Documentdoc=newDocument();// Incluir esses campos em um Documento Lucenedoc.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);
Aqui quase todo o email é indexado. Exeto o documento.
Isso deixa mais optimizado sua aplicação.
Luizao
fernandosc:
Então eu tenho que usar o Solr para gerar a minha indexação para depois usar o Lucene?
Grato.
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: