O Lucene (open-source search software) é uma ferramenta que tem lugar em um grande número de aplicações web e quem não conhece está perdendo tempo. Ontem saiu a nova versão com novidades que merecem aparecer aqui.
A grande mudança acontece com o novo algoritmo de indexação que agora trabalha na memória e consegue enorme melhoria no desempenho. A simples troca do jar do Lucene 2.2 pelo novo jar do Lucene 2.3 (sem recompilar nada) já mostra um excelente ganho de desempenho na indexação que pode atingir até 500%.
Os defaults do IndexWriter mudaram de modo a maximizar a velocidade de indexação.
Agora o IndexWriter usa a memória, 16 MB por default) (call IndexWriter.setMaxBufferedDocs to get backwards compatible behavior).
ConcurrentMergeScheduler serve para executar merges usando background threads (call IndexWriter.setMergeScheduler(new SerialMergeScheduler()) to get backwards compatible behavior).
Os merges são escolhidos baseados no tamanho em bytes de cada segmento ao invés do número de documentos (call IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get backwards compatible behavior).
Caramba, essa estatística não está muito irreal? Vou testar aqui numa aplicação minha para ver se o ganho de indexação pelo menos é metade disso.
Testaste se está bem rápido mesmo? Uso Lucene desde as versões 1.X e já estava um pouco desapontado pela performance.
Aliás, alguém sabe como anda o Hadoop?
A mudancas do lucene de 2.0 para 2.1 e 2.1 para 2.2 tambem anunciaram grandes ganhos de performance. Em uma delas o formato binario do indice foi totalmente modificado e ficou incompativel (mas ele mesmo convertia se precisasse). O Lucene é um dos projetos open source mais incriveis que conheco, e é uma grande aplicação de conceitos academicos.
Hadoop continua encubado, e esta sendo utilizado em um projeto recem lancado, o Manhount, que tem um pessoal de grandes universidades envolvidos.
Maquiavel, o lucene e qualquer indexador sempre vai ser mais lento para escrever do que pra ler. Pra mim a leitura pelo lucene sempre foi incrivelmente rapida.
Realmente mudou mas não vi ganhos aparentes. Deve ser bem incrível mesmo por dentro, mas ainda não tenho capacidade de entender por dentro a fundo a maneira que faz os índices.
Então não saiu muito do que estava a um ano atrás.
Para ler estou bem satisfeito, na escrita já sabia que era bem mais lento, mas ainda esperava algo mais. Geralmente faço criação de pouco em pouco dos índices, assim não sobrecarrego o sistema. Não gosto de comparar coisas, mas quando fiz testes do MS IndexServer e Lucene 1.9 na época, o IndexServer e o IFilter não comiam um processador inteiro para eles e faziam a indexação em menor tempo (não tão menor). Tinha um projeto que a primeira indexação tinha que indexar 120GB de pdfs, não creio que seja culpa só do Lucene e do PDFBox, e talvez o que eu fiz na época também não era tão otimizado, mas mesmo assim era mais simples integrar o Lucene ao portal em PHP do que o IndexServer.
Com certeza, o Lucene é um projeto impressionante. Não só para a comunidade Java, mas para o povo que trabalha com php (como o maquiavel citou) e o pessoal de ruby com o ferret e o lucene4c para C. Acredito que tenha suporte para outras linguagens, mas só trabalhei com essas.
Lucene é o tipo de projeto que o cara poderia ter ficado rico (ou ganho uma bela grana), mas preferiu fazer um projeto open-source e gratuito. Tem que tirar o chapéu para o autor e para o projeto, que é realmente fenomenal. Outro que também me impressiona bastante é o JGroups.