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

    Constructors
    Constructor
    Description
    LiveFieldValues(ReferenceManager<S> mgr, T missingValue)
    The missingValue must be non-null.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(String id, T value)
    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 and ReferenceManager.acquire() is guaranteed to return the new reference.
    void
    Called right before a refresh attempt starts.
    void
     
    void
    Call this after you've successfully deleted a document from the index.
    get(String id)
    Returns the current value for this id, or null if the id isn't in the index or was deleted.
    protected abstract T
    This is called when the id/value was already flushed and opened in an NRT IndexSearcher.
    int
    Returns the [approximate] number of id/value pairs buffered in RAM.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • LiveFieldValues

      public LiveFieldValues(ReferenceManager<S> mgr, T missingValue)
      The missingValue must be non-null.
  • Method Details

    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • beforeRefresh

      public void beforeRefresh() throws IOException
      Description copied from interface: ReferenceManager.RefreshListener
      Called right before a refresh attempt starts.
      Specified by:
      beforeRefresh in interface ReferenceManager.RefreshListener
      Throws:
      IOException
    • afterRefresh

      public void afterRefresh(boolean didRefresh) throws IOException
      Description copied from interface: ReferenceManager.RefreshListener
      Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true and ReferenceManager.acquire() is guaranteed to return the new reference.
      Specified by:
      afterRefresh in interface ReferenceManager.RefreshListener
      Throws:
      IOException
    • add

      public void add(String id, T value)
      Call this after you've successfully added a document to the index, to record what value you just set the field to.
    • delete

      public void delete(String id)
      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

      public T get(String id) throws IOException
      Returns the current value for this id, or null if the id isn't in the index or was deleted.
      Throws:
      IOException
    • lookupFromSearcher

      protected abstract T lookupFromSearcher(S s, String id) throws IOException
      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