C'è un modo per mantenere l'indice nella RAM invece di tenerlo sul disco fisso?Ricerca più veloce in Lucene: esiste un modo per mantenere l'intero indice nella RAM?
Vogliamo rendere la ricerca più veloce.
C'è un modo per mantenere l'indice nella RAM invece di tenerlo sul disco fisso?Ricerca più veloce in Lucene: esiste un modo per mantenere l'intero indice nella RAM?
Vogliamo rendere la ricerca più veloce.
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
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.
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
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.
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
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
Consultare la documentazione RAMDirectory. Ecco uno basic usage example. Funzionerà solo se l'indice è abbastanza piccolo.
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
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. –
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
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
oops, modificherà il mio post – Narayan
Da "ImproveSearchingSpeed": "Apri IndexReader con readOnly = true", sai come farlo in Lucene 4+? Non ho trovato nessun esempio ... – Gevorg