quarta-feira, 3 de agosto de 2011

Índices Solr - Atualiza ou Deleta?

De tempos em tempos, no trabalho com Solr há um problema comum - quando você atualizar a estrutura do índice Solr. Há várias razões para estas mudanças - os novos requisitos funcionais, otimização, ou qualquer outra coisa - não é importante. O importante é as perguntas que surgem - devemos remover o índice, ou simplesmente mudar a estrutura e fazer uma indexação completa? Contrariamente às aparências, a resposta a esta pergunta depende de as mudanças que fizemos na estrutura do índice.

Pessoalmente, eu sou um defensor de soluções que têm a menor chance de causar problemas - Eu só gosto de dormir à noite. Acho que a remoção do índice depois de atualizar sua estrutura e, em seguida, fazendo a correção monetária integral dos dados é uma dessas soluções, pelo menos na minha opinião. Estou ciente, no entanto, que este tipo de solução nem sempre é aceitável. Então, quando não somos obrigados a remover o índice, e quando é que vai nos expor para potenciais problemas com o Solr quando não fazê-lo?

A resposta à pergunta depende o que mudou na estrutura do índice. Tais mudanças podem ser divididas em três áreas que abrangem a maioria das mudanças que fazemos na estrutura do índice:

  • Adição / remoção de novo campo
  • Modificação semelhança
  • Campo de modificação

Adição / remoção de novo campo

No caso do primeiro tipo de modificação da matéria é muito simples - se adicionar ou remover um novo campo no schema.xml não há necessidade de remover o índice inteiro antes de reindexação. Solr lida com a adição de um novo campo para o índice atual. Claro, você deve estar ciente de que os documentos que não será após esta operação não será re-indexados ou atualizada automaticamente.

Modificação semelhança

No segundo caso - a mudança da classe que é responsável por Similaridade também não nos força a excluir o índice depois da mudança. Mas, ao contrário do exemplo anterior, se quisermos que Solr calcule corretamente a pontuação e, portanto, para classificar na ordem correta, seremos forçados a reindexar todos os documentos anteriormente presentes no índice.

Campo de modificação

Vamos parar um minuto sobre o terceiro caso. Vamos supor que nós modificamos um pouco o campo no índice por um motivo prosaico - não estamos mais interessados na normalização do seu comprimento. Montamos omitNorms = "true" (presumo que a configuração anterior foi omitNorms = "false"). Se reindexar todos os documentos, os índices Lucene, nos segmentos combinados, ainda terá informações sobre a normalização do comprimento do campo. Algo deu errado. Este é precisamente o caso em que é necessário para excluir o índice após a mudança em sua estrutura, e antes da correção monetária integral. À primeira vista, parece que esta é uma mudança muito pequena, mas pensando mais longe, temos alguns efeitos colaterais da mudança. Vale lembrar que algumas das propriedades do campo são substituídos por outros, como no caso de normalização do comprimento - se um segmento terá normalização do comprimento, e o segundo não,é quando você combina os segmentos, você vai ter a normalização do comprimento naquele que foi criado.

Texto de Texto Original: JavaLobby

Nenhum comentário:

Postar um comentário