A
MultiIndex
consists of a {@link VolatileIndex} and multiple{@link PersistentIndex}es. The goal is to keep most parts of the index open with index readers and write new index data to the volatile index. When the volatile index reaches a certain size (see {@link SearchIndex#setMinMergeDocs(int)}) a new persistent index is created with the index data from the volatile index, the same happens when the volatile index has been idle for some time (see {@link SearchIndex#setVolatileIdleTime(int)}). The new persistent index is then added to the list of already existing persistent indexes. Further operations on the new persistent index will however only require an
IndexReader
which serves for queries but also for delete operations on the index.
The persistent indexes are merged from time to time. The merge behaviour is configurable using the methods: {@link SearchIndex#setMaxMergeDocs(int)}, {@link SearchIndex#setMergeFactor(int)} and{@link SearchIndex#setMinMergeDocs(int)}. For detailed description of the configuration parameters see also the lucene
IndexWriter
class.
This class is thread-safe.
Note on implementation: Multiple modifying threads are synchronized on a
MultiIndex
instance itself. Sychronization between a modifying thread and reader threads is done using {@link #updateMonitor} and{@link #updateInProgress}.