Add soft-commit and NRT overlay: IndexWriter::soft_commit, IndexWriter::nrt_searcher, and NrtDirectory #2682
+313
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR description
This change introduces Near Real-Time indexing support:
Soft commit
PreparedCommit::soft_commit()andIndexWriter::soft_commit()to publish current uncommitted segments to the in-memory committed set without persistingmeta.json.meta.jsonwrite happens.NRT searcher
IndexWriter::nrt_searcher()to construct a Searcher directly from the in-memory committed segments for instant visibility after soft commits.NRTDirectory overlay
NrtDirectory, an overlay that writes to an in-memoryRamDirectoryand reads from overlay first, then base directory.sync_directory()persists overlay files to the base directory to make data durable when desired.Compatibility
meta.jsonand triggers garbage collection as before.Why
meta.jsonon every change.How to use
NrtDirectorywhen creating/opening the index.index_writer.soft_commit()after indexing to publish for NRT search.index_writer.nrt_searcher()to obtain a Searcher that sees soft-committed data immediately.index_writer.commit()whenever you are ready to persistmeta.jsonand make changes durable on disk.