Lucene sembra memorizzare i risultati della ricerca nella cache - perché?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Nel mio progetto utilizziamo Lucene 2.4.1 per la ricerca full-text. Questo è un progetto J2EE, IndexSearcher viene creato una volta. Sullo sfondo, l'indice viene aggiornato ogni paio di minuti (quando il contenuto cambia). Gli utenti possono cercare l'indice attraverso un meccanismo di ricerca sulla pagina.

Il problema è che i risultati restituiti da Lucene sembrano in qualche modo essere memorizzati nella cache.

Questo è lo scenario che ho notato:

  • Avvio l'applicazione e cerco "parola chiave": vengono restituiti 6 risultati
  • L'indice viene aggiornato, utilizzando Luke vedo che ora ci sono 8 risultati per interrogare 'parola chiave' ',
  • Cerco di nuovo usando l'applicazione, di nuovo vengono restituiti 6 risultati.

Ho analizzato la nostra configurazione e non ho trovato alcuna cache da nessuna parte. Ho eseguito il debug della ricerca e non c'è memorizzazione nella cache del codice di uscita, searcher.search restituisce 6 risultati.

Lucene memorizza i risultati nella cache internamente? Quali proprietà ecc. Devo controllare?

È stato utile?

Soluzione

Per vedere le modifiche apportate da IndexWriters a un indice per il quale hai un IndexReader aperto, assicurati di chiamare IndexReader.reopen () per vedere le ultime modifiche.

Assicurati anche che il tuo IndexWriter sta eseguendo il commit delle modifiche, tramite un commit esplicito (), un close () o con autoCommit impostato su true.

Altri suggerimenti

Con versioni precedenti alla 2.9.0, Lucene memorizza automaticamente nella cache i risultati delle query. Con le versioni successive non è possibile memorizzare nella cache, a meno che non si esegua il wrapping della query in un QueryFilter e quindi il risultato in un CachingWrapperFilter. Puoi prendere in considerazione il passaggio a una versione > = 2.9.0 se riaprire l'indice diventa un problema

Un'altra nota: per IndexReader trovare gli altri thread aggiornati in tempo reale dei documenti, quando si inizializza IndexReader, il parametro "sola lettura"; deve essere falso. Altrimenti, il metodo reopen () non funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top