Sto cercando di capire come dovrebbe essere usato Lucene.
Da quanto ho letto, la creazione di un IndexReader è costosa, quindi usare una Search Manager shoulg è la scelta giusta. Tuttavia, un SearchManager dovrebbe essere prodotto da un NRTManager (che, a proposito, dovrebbe sostituire IndexWriter per ogni operazione di aggiunta o cancellazione eseguita). Ma per avere un NRTManager , dovrei prima avere un IndexWriter , e qui arriva il mio problema.
La documentazione dice:
- un IndexWriter è thread-safe
- il costruttore di questa classe prende un oggetto
Directory, quindi sembra che la creazione di una instace sia costosa (come nel caso di IndexReader) -
tutte le modifiche sono bufferizzate e scaricate periodicamente (quindi sembrano incoraggiare l'uso di una singola istanza)
ma
-
le modifiche, anche se svuotate saranno visibili solo dopo
commitoclose - dopo aver completato gli aggiornamenti (aggiungi / elimina), l'istanza deve essere chiusa
- Ho anche trovato questo: link dove si dice che non chiudere uno scrittore potrebbe rovinare tutto
Quindi cosa dovrei fare? Sta avendo una singola istanza di IndexWriter una buona idea (fai solo commit e mai close it?)
EDIT: Inoltre, se utilizzo NRTManager , come posso creare commit ? È persino possibile?