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
commit
oclose
- 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?