Lucene parece estar guardando en caché los resultados de búsqueda, ¿por qué?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

En mi proyecto usamos Lucene 2.4.1 para la búsqueda de texto completo. Este es un proyecto J2EE, IndexSearcher se crea una vez. En el fondo, el índice se actualiza cada par de minutos (cuando el contenido cambia). Los usuarios pueden buscar en el índice a través de un mecanismo de búsqueda en la página.

El problema es que los resultados devueltos por Lucene parecen estar almacenados en caché de alguna manera.

Este es el escenario que noté:

  • Comienzo la aplicación y busco 'palabra clave': se devuelven 6 resultados,
  • El índice se actualiza, utilizando Luke veo que ahora hay 8 resultados para consultar la palabra clave ',
  • Busco de nuevo usando la aplicación, nuevamente se devuelven 6 resultados.

Analicé nuestra configuración y no he encontrado ningún almacenamiento en caché en ninguna parte. He depurado la búsqueda y no hay almacenamiento en caché en nuestro código, searcher.search devuelve 6 resultados.

¿El caché de Lucene resulta internamente de alguna manera? ¿Qué propiedades debo verificar, etc.?

¿Fue útil?

Solución

Para ver los cambios realizados por IndexWriters contra un índice para el que tiene un IndexReader abierto, asegúrese de llamar a IndexReader.reopen () para ver los últimos cambios.

Asegúrese también de que su IndexWriter está confirmando los cambios, ya sea a través de un compromiso explícito (), un cierre (), o tener autoCommit establecido en verdadero.

Otros consejos

Con versiones anteriores a 2.9.0, Lucene guardó en caché automáticamente los resultados de las consultas. Con las versiones posteriores, no hay almacenamiento en caché a menos que ajuste su consulta en un QueryFilter y luego envuelva el resultado en un CachingWrapperFilter. Podría considerar cambiar a una versión > = 2.9.0 si la reapertura del índice se convierte en un problema

Una nota más: para que IndexReader encuentre los documentos actualizados de otros subprocesos en tiempo real, al inicializar IndexReader, el parámetro " solo lectura " tiene que ser falso De lo contrario, el método reopen () no funcionará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top