public class NRTWorkspaceImpl extends AbstractWorkspaceImpl implements DirectoryBasedReaderProvider
Workspaceimplementation taking advantage of NRT Lucene features.
IndexReaderinstances are obtained directly from the
IndexWriter, which is not forced to flush all pending changes to the
Lucene requires in its current version to flush delete operations, or the
retrieved via NRT will include deleted Document instances in queries; flushing delete operations
happens to be quite expensive so this
Workspace implementation attempts to detect when such
a flush operation is needed.
Applying write operations flags "indexReader requirements" with needs for either normal flush
or flush including deletes, but does not update
IndexReader instances. The
are updated only if and when a fresh
IndexReader is requested via
This method will check if it can return the last opened
IndexReader or in case of the reader being stale
open a fresh reader from the current
Generation counters are used to track need-at-least version versus last-updated-at version:
shared state is avoided between index writers and reader threads to avoid high complexity.
afterTransactionApplied(boolean, boolean) might trigger multiple times flagging
the index to be dirty without triggering an actual
IndexReader refresh, so the version counters
can have gaps: method
refreshReaders() will always jump to latest seen version, as it will
refresh the index to satisfy both kinds of flush requirements (writes and deletes).
We keep a reference
IndexReader in the
currentReader atomic reference as a fast path
for multiple read events when the index is not dirty.
This class implements both
|Constructor and Description|
|Modifier and Type||Method and Description|
Invoked after all changes of a transaction are applied.
Makes sure eventually pending changes are made visible to IndexReaders.
Get the commit policy applied to the workspace
Some workspaces need this to determine for example the kind of flush operations which are safe to apply.
areSingleTermDeletesSafe, closeIndexWriter, getAnalyzer, getDocumentBuilder, getEntitiesInIndexManager, getIndexName, getIndexWriter, getIndexWriter, getIndexWriterDelegate, getIndexWriterDelegate, incrementModificationCounter, isDeleteByTermEnforced, optimizerPhase, performOptimization, shutDownNow
public void afterTransactionApplied(boolean someFailureHappened, boolean streaming)
Workspace.getIndexWriter()in a finally block as implementations might rely on counters to release the IndexWriter.
someFailureHappened- usually false, set to true if errors where caught while using the IndexWriter
streaming- if no immediate visibility of the change is required (hint for performance)
public DirectoryReader openIndexReader()
public void closeIndexReader(IndexReader reader)
public void initialize(DirectoryBasedIndexManager indexManager, Properties props)
public void flush()
public void notifyWorkApplied(LuceneWork work)
Copyright © 2006-2017 Red Hat, Inc. All Rights Reserved