Estratégias para manter um Índice Lucene atualizado com mudanças no modelo de domínio

StackOverflow https://stackoverflow.com/questions/38125

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu estava procurando saber a opinião das pessoas sobre como manter um índice Lucene atualizado à medida que alterações são feitas nos objetos do modelo de domínio de um aplicativo.

O aplicativo em questão é um aplicativo da web baseado em Java/J2EE que usa Hibernate.A maneira como as coisas funcionam atualmente é que todos os objetos do modelo mapeados do Hibernate implementam uma interface "Indexável" comum que pode retornar um conjunto de pares chave/valor que são registrados no Lucene.Sempre que uma operação CRUD é executada envolvendo tal objeto eu a envio via fila JMS para um bean orientado a mensagens que registra no Lucene a chave primária do objeto e os pares chave/valor retornados do método index( ) do objeto indexável que foi oferecido.

Minhas principais preocupações sobre esse esquema é se o MDB ficar para trás e não conseguir acompanhar as operações de indexação que estão chegando ou se algum tipo de erro/exceção impedir que um objeto seja indexado.O resultado é um índice desatualizado por um determinado período de tempo ou por um longo período.

Basicamente, eu estava me perguntando que tipo de estratégias os outros criaram para esse tipo de coisa.Não necessariamente procurando uma resposta correta, mas estou imaginando uma lista de idéias do tipo "quadro branco" para fazer meu cérebro pensar em alternativas.

Foi útil?

Solução

Altere a mensagem:apenas forneça a chave primária e a data atual, não os pares chave/valor.Seu mdb busca a entidade por chave primária e chama index().Após a indexação você define um valor "atualizado" no seu índice para a data da mensagem.Você atualiza seu índice somente se a data da mensagem for posterior ao campo "atualizado" do índice.Dessa forma, você não pode ficar para trás porque sempre busca primeiro os pares chave/valor atuais.

Como uma alternativa:dê uma olhada em http://www.compass-project.org.

Outras dicas

A resposta aceita tem 8 anos e está muito desatualizada.

O Projeto Compass não é mais mantido há muito tempo, pois seu principal desenvolvedor passou a criar o excelente Elasticsearch.

A resposta moderna para isso é usar Pesquisa de hibernação, que, aliás, pode mapear para um índice Lucene diretamente ou por meio do Elasticsearch.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top