Lucene parece ser cache de resultados de pesquisa - por quê?
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?
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.