2009-08-18 13 views

risposta

16

C'è un modo per mantenere l'indice nella RAM invece di tenerlo sull'hard disk?

Uso della classe RAMDirectory

SampleUsage here

Anche dal Lucene FAQs

ImproveSearchingSpeed

Generalmente per prestazioni di indicizzazione più veloce è meglio svuotare l'utilizzo della RAM invece del conteggio dei documenti e utilizzare un buffer RAM di grandi dimensioni il più possibile.

Also check this question:

EDIT:RE: RamDirectory, come l'API dice RamDirectory è Un'implementazione Directory residente in memoria., si mantiene solo quelli dell'indice nella RAM come specificato dalla directory RAMDirecory

RE: Caching Nella mia conoscenza, Lucene memorizza nella cache i risultati di ricerca per mezzo di filtri pls Look @CachingWrapperFilter e QueryWrapperFilter

+0

Grazie molto per la tua risposta dettagliata. Ho altre due domande. In primo luogo, ho letto che Lucene fa il caching, che manterrebbe l'indice parzialmente nella RAM. Ma la RAMDirectory è diversa, giusto? Mantiene tutto l'indice nella RAM? In secondo luogo, ho visto il setRAMBufferSizeMB, quello che ho capito è che era per accelerare l'indicizzazione piuttosto che cercare. Accelera anche la ricerca? – elif

+0

oops, modificherà il mio post – Narayan

+0

Da "ImproveSearchingSpeed": "Apri IndexReader con readOnly = true", sai come farlo in Lucene 4+? Non ho trovato nessun esempio ... – Gevorg

1

Un disco RAM potrebbe essere una soluzione per questo. Un mini-HOWTO è disponibile allo http://www.vanemery.com/Linux/Ramdisk/ramdisk.html. Montare il disco RAM come directory dell'indice e si dovrebbe fare.

+0

Si noti che per le grandi indici, sono disponibili anche dischi RAM "hardware" ... in pratica dispositivi con interfaccia hard disk, ma pieni di DRAM invece di piatti. – erickson

+0

Grazie per la risposta. Lo abbiamo considerato. Ma tendiamo a non usare questa opzione poiché non abbiamo molta esperienza nel sistema operativo. Pensiamo che ci darebbe meno controllo e meno capacità di osservare/monitorare l'indice. – elif

1

Consultare la documentazione RAMDirectory. Ecco uno basic usage example. Funzionerà solo se l'indice è abbastanza piccolo.

+0

E grazie per la risposta. Che taglia sarebbe piccola? L'indice è di circa 20 MB e non ci aspettiamo che cresca più di 5 volte. È abbastanza piccolo? – elif

+0

Prego. Un 100 MB è davvero abbastanza piccolo. Dovresti comunque considerare di utilizzare un indice del disco con le corrette impostazioni della dimensione dello stack JVM. Ciò consentirà di evitare di dover indicizzare nuovamente ogni volta che si riavvia l'applicazione e potrebbe essere veloce quanto la RAMDirectory. Vedi anche: http://www.lucidimagination.com/Community/Hear-from-the-Experts/Articles/Scaling-Lucene-and-Solr sulla velocità di ricerca. –

+0

Perché reindicizza quando riavvio l'applicazione? Pensavo di poter leggere l'indice sul disco rigido nella RAM usando RAMDirectory. Devo reindicizzare ogni volta che voglio leggere l'indice nella RAM? Grazie per il link. – elif

Problemi correlati