Class NumericDocValues

java.lang.Object
org.apache.lucene.search.DocIdSetIterator
org.apache.lucene.index.NumericDocValues
Direct Known Subclasses:
FilterNumericDocValues

public abstract class NumericDocValues extends DocIdSetIterator
A per-document numeric value.
  • Constructor Details

    • NumericDocValues

      protected NumericDocValues()
      Sole constructor. (For invocation by subclass constructors, typically implicit.)
  • Method Details

    • longValue

      public abstract long longValue() throws IOException
      Returns the numeric value for the current document ID. It is illegal to call this method after advanceExact(int) returned false.
      Returns:
      numeric value
      Throws:
      IOException
    • longValues

      public void longValues(int size, int[] docs, long[] values, long defaultValue) throws IOException
      Bulk retrieval of numeric doc values. This API helps reduce the performance impact of virtual function calls.

      This API behaves as if implemented as below, which is the default implementation:

       public void longValues(int size, int[] docs, long[] values, long defaultValue) throws IOException {
         for (int i = 0; i < size; ++i) {
           int doc = docs[i];
           long value;
           if (advanceExact(doc)) {
             value = longValue();
           } else {
             value = defaultValue;
           }
           values[i] = value;
         }
       }
       

      NOTE: The docs array is required to be sorted in ascending order with no duplicates.

      NOTE: This API doesn't allow callers to know which doc IDs have a value or not. If you need to exclude documents that don't have a value for this field, then you could apply a FieldExistsQuery as a BooleanClause.Occur.FILTER clause. Another option is to fall back to using advanceExact(int) and longValue() on ranges of doc IDs that may not be dense, e.g.

       if (size > 0 && values.advannceExact(docs[0]) && values.docIDRunEnd() > docs[size - 1]) {
         // use values#longValues to retrieve values
       } else {
         // some docs may not have a value, use #advanceExact and #longValue
       }
       
      Parameters:
      size - the number of values to retrieve
      docs - the buffer of doc IDs whose values should be looked up
      values - the buffer of values to fill
      defaultValue - the value to put in the buffer when a document doesn't have a value
      Throws:
      IOException
    • advanceExact

      public abstract boolean advanceExact(int target) throws IOException
      Advance the iterator to exactly target and return whether target has a value. target must be greater than or equal to the current doc ID and must be a valid doc ID, ie. ≥ 0 and < maxDoc. After this method returns, DocIdSetIterator.docID() returns target.

      Note: it is illegal to call DocIdSetIterator.intoBitSet(int, org.apache.lucene.util.FixedBitSet, int) or DocIdSetIterator.docIDRunEnd() when this method returns false.

      Throws:
      IOException