Package org.apache.lucene.search
Class LiveFieldValues<S,T>
java.lang.Object
org.apache.lucene.search.LiveFieldValues<S,T>
- All Implemented Interfaces:
Closeable
,AutoCloseable
,ReferenceManager.RefreshListener
public abstract class LiveFieldValues<S,T>
extends Object
implements ReferenceManager.RefreshListener, Closeable
Tracks live field values across NRT reader reopens. This holds a map for all updated ids since
the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must
reopen your NRT reader periodically otherwise the RAM consumption of this class will grow
unbounded!
NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread "won".
-
Constructor Summary
ConstructorsConstructorDescriptionLiveFieldValues
(ReferenceManager<S> mgr, T missingValue) The missingValue must be non-null. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Call this after you've successfully added a document to the index, to record what value you just set the field to.void
afterRefresh
(boolean didRefresh) Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true andReferenceManager.acquire()
is guaranteed to return the new reference.void
Called right before a refresh attempt starts.void
close()
void
Call this after you've successfully deleted a document from the index.Returns the current value for this id, or null if the id isn't in the index or was deleted.protected abstract T
lookupFromSearcher
(S s, String id) This is called when the id/value was already flushed and opened in an NRT IndexSearcher.int
size()
Returns the [approximate] number of id/value pairs buffered in RAM.
-
Constructor Details
-
LiveFieldValues
The missingValue must be non-null.
-
-
Method Details
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
beforeRefresh
Description copied from interface:ReferenceManager.RefreshListener
Called right before a refresh attempt starts.- Specified by:
beforeRefresh
in interfaceReferenceManager.RefreshListener
- Throws:
IOException
-
afterRefresh
Description copied from interface:ReferenceManager.RefreshListener
Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true andReferenceManager.acquire()
is guaranteed to return the new reference.- Specified by:
afterRefresh
in interfaceReferenceManager.RefreshListener
- Throws:
IOException
-
add
Call this after you've successfully added a document to the index, to record what value you just set the field to. -
delete
Call this after you've successfully deleted a document from the index. -
size
public int size()Returns the [approximate] number of id/value pairs buffered in RAM. -
get
Returns the current value for this id, or null if the id isn't in the index or was deleted.- Throws:
IOException
-
lookupFromSearcher
This is called when the id/value was already flushed and opened in an NRT IndexSearcher. You must implement this to go look up the value (eg, via doc values, field cache, stored fields, etc.).- Throws:
IOException
-