Pergunta

No meu projeto usamos Lucene 2.4.1 para pesquisa de texto completo. Este é um projeto J2EE, IndexSearcher é criada uma vez. No fundo, o índice é atualizado a cada dois minutos (quando o conteúdo muda). Os usuários podem pesquisar o índice por meio de um mecanismo de pesquisa na página.

O problema é que os resultados retornados por Lucene parecem ser armazenado em cache de alguma forma.

Este é cenário notei:

  • eu iniciar o aplicativo e procure por 'palavra-chave' - 6 resultados são retornados,
  • Index é atualizado, usando Luke eu vejo, que há 8 resultados agora a consulta 'palavra-chave ',
  • I, procure novamente utilizando o aplicativo, novamente 6 resultados são retornados.

Eu analisei a nossa configuração e não encontraram qualquer lugar cache. Eu tenho depurado a busca, e não há nenhum cache em fora código, searcher.search returnes 6 resultados.

O Lucene resultados de cache internamente de alguma forma? Que propriedades etc. devo verificar?

Foi útil?

Solução

Para ver as alterações feitas por IndexWriters contra um índice para o qual você tem um IndexReader aberta, certifique-se de chamada IndexReader.reopen () para ver as últimas alterações.

Certifique-se também de que o seu IndexWriter está a cometer as mudanças, seja através de cometer um explícita (), um close (), ou ter autoCommit conjunto para true.

Outras dicas

Com as versões anteriores a 2.9.0, Lucene em cache automaticamente os resultados de consultas. Com versões posteriores não há cache, a menos que envolva sua consulta em um QueryFilter e em seguida, enrole o resultado em uma CachingWrapperFilter. Você poderia considerar a mudança para uma versão> = 2.9.0, se reabrir o índice se torna um problema

Mais uma nota: Para IndexReader encontrar o tempo real outros tópicos atualizados documentos, quando initialize IndexReader, o parâmetro "somente leitura" tem de ser falsa. Caso contrário, o método de reabrir () não irá funcionar.

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