Lucene

Olá,

Eu vou precisar trabalhar com buscas em textos e estou pensando em utilizar a biblioteca Apache Lucene (http://lucene.apache.org). Já fiz uns testes aqui e me pareceu interessante
Entretanto, gostaria de saber se alguem daqui já a utilizou numa situação real, se teve boas ou más experiências, ou se me indicam uma outra solução mais adequada.

Desde já agradeço!! :slight_smile:

Lucene eh o que ha. Muito alto nivel.

Rafael

Olá

Lucene é um dos meus atuais interesses. Apenas comecei a estuda-lo e não manjo tanto como o Rafael que já trabalhou com ele. Mas pelo que já pude perceber ele é muito interessante.

Há outra alternativas de busca isoladas mas não conheço nenhuma outra que se integre ao seu sistema Java.

[]s
Luca

Pessoal,

O Lucene continua sendo uma boa opção mesmo a massa de dados textuais estando em um banco de dados ao invés de arquivos?

Sim. Eh ligeiramente um pouco mais chato de fazer, ja que vc tem que criar 2 ou 3 objetos manualmente e dizer ao Lucene como tratar cada campo da tabela. Ai ele vai gerar um indice em disco, independentemente do banco de dados.

Fazer buscas no banco de dados performaticas eh algo relativamente trabalhoso, pois usar LIKE %string% mata a performance, te obrigando entao a usar uma abordagem bem diferente para nao sacrificar o sistema.

Logo, o Lucene vai ser uma otima ferramenta para esta tarefa.

Rafael

[quote=Rafael Steil]Eh ligeiramente um pouco mais chato de fazer, ja que vc tem que criar 2 ou 3 objetos manualmente e dizer ao Lucene como tratar cada campo da tabela. Ai ele vai gerar um indice em disco, independentemente do banco de dados.
[/quote]
Neste caso de banco de dados, como funciona quando vc altera algum campo da tabela? Por exemplo após vc fazer um “update” na base, vc precisa recriar os indices certo?

Sim. Voce precisa dar um delete o registro e entao inserir de novo.

Rafael

Uma outra questão sobre o Lucene,

Verifiquei a necessidade de se implementar um Analyser adaptado a lingua portuguesa, devido as “stop words” e ao processo de stemming. Procurei algo já pronto e não encontrei.
Por acaso vcs sabem de algo que eu possa utilizar?? Ou terei eu mesmo que implementar??

Se vc nao encontrar alguem que ja tenha feito e que te disponibilize, entao vc tem que implementar. Porem, isso nao eh mandatorio para ter o Lucene funcionando. Definir as stop words vai fazer com o que o indice tenha mais qualidade de conteudo apenas.

Rafael

E ai pessoal,
Só para complementar, se alguém precisar de um analyzer português-br pode acha-lo em http://cvs.apache.org/viewcvs.cgi/jakarta-lucene-sandbox/contributions/analyzers/src/java/org/apache/lucene/analysis/br/

Ressalto que ainda não fiz testes com essas classes…
No mais, valeu pela força aí!!!
É isso…

Olá pessoal,
Aproveitando o gancho desse tópico.
Alguém pode detalhar melho o uso do lucene com Banco de Dados ou exemplinho, pra facilitar o entendimento?
To precisando usar esse cara. Se puderem ajudar
vlw!

Eu tmb gostaria. Alguem pode ajudar na integracao Lucene x BD.
Lucas, FCanjos e Rafael , como andam os projetos com lucene x BD.
Eu ia usar o MySQL

[quote=Rafael Steil]Se vc nao encontrar alguem que ja tenha feito e que te disponibilize, entao vc tem que implementar. Porem, isso nao eh mandatorio para ter o Lucene funcionando. Definir as stop words vai fazer com o que o indice tenha mais qualidade de conteudo apenas.

Rafael[/quote]

Pelo que entendi na documentação do Lucene, vai ter problema com acentos e realização de busca fonética também, não é só na qualidade do índice.

Abraços.

Estou tendo problemas com o Analyzer portgues…

http://svn.apache.org/repos/asf/lucene/java/trunk/contrib/analyzers/src/java/org/apache/lucene/analysis/br/

o mesmo corta a ultima letra das palavras… exemplo…

Frase: gosto de chocolate

se olhar no Luke aparece

gost
chocolat

quando baixei os arquivos no arquivo BrazilianStemmer.java
existe um erro no método

private String changeTerm( String value )

para retirnar os erros eu fiz…

[code]
ORIGINAL
private String changeTerm( String value ) {
int j;
String r = “” ;

// be-safe !!!
if (value == null) {
  return null ;
}

value = value.toLowerCase() ;
for (j=0 ; j < value.length() ; j++) {
  if ((value.charAt(j) == 'á') ||
      (value.charAt(j) == 'â') ||
      (value.charAt(j) == 'ã')) {
    r= r + "a" ; continue ;
  }
  if ((value.charAt(j) == 'é') ||
      (value.charAt(j) == 'ê')) {
    r= r + "e" ; continue ;
  }
  if (value.charAt(j) == 'í') {
    r= r + "i" ; continue ;
  }
  if ((value.charAt(j) == 'ó') ||
      (value.charAt(j) == 'ô') ||
      (value.charAt(j) == 'õ')) {
    r= r + "o" ; continue ;
  }
  if ((value.charAt(j) == 'ú') ||
      (value.charAt(j) == 'ü')) {
    r= r + "u" ; continue ;
  }
  if (value.charAt(j) == 'ç') {
    r= r + "c" ; continue ;
  }
  if (value.charAt(j) == 'ñ') {
    r= r + "n" ; continue ;
  }

  r= r+ value.charAt(j) ;
}

return r ;

}[/code]

[code]
ALTERADO
private String changeTerm( String value ) {
int j;
String r = “” ;

    // be-safe !!!
    if (value == null) {
      return null ;
    }

    value = value.toLowerCase() ;
    for (j=0 ; j < value.length() ; j++) {
      if ((value.charAt(j) == 'á') ||
          (value.charAt(j) == 'â') ||
          (value.charAt(j) == 'ã')) {
        r= r + "a" ; continue ;
      }
      if ((value.charAt(j) == 'é') ||
          (value.charAt(j) == 'ê')) {
        r= r + "e" ; continue ;
      }
      if (value.charAt(j) == 'í') {
        r= r + "i" ; continue ;
      }
      if ((value.charAt(j) == 'ó') ||
          (value.charAt(j) == 'ô') ||
          (value.charAt(j) == 'õ')) {
        r= r + "o" ; continue ;
      }
      if ((value.charAt(j) == 'ú') ||
          (value.charAt(j) == 'ü')) {
        r= r + "u" ; continue ;
      }
      if (value.charAt(j) == 'ç') {
        r= r + "c" ; continue ;
      }
      if (value.charAt(j) == 'ñ') {
        r= r + "n" ; continue ;
      }

      r= r+ value.charAt(j) ;
    }

    return r ;
  } [/code]

Alguem conseguiu usar esse Analyzer??
abraços!

Exemplo do Lucene com banco de dados:

http://kasparov.skife.org/blog/2004/09/11/#lucene-ojb

Abraços!

Só para dar mais uma dica, você pode trabalhar com o Lucene através de ORM, por intermédio do projeto Compass (mais maduro) e o projeto Hibernate Search.