Class DoubleValuesSource

java.lang.Object
org.apache.lucene.search.DoubleValuesSource
All Implemented Interfaces:
SegmentCacheable

public abstract class DoubleValuesSource extends Object implements SegmentCacheable
Base class for producing DoubleValues

To obtain a DoubleValues object for a leaf reader, clients should call rewrite(IndexSearcher) against the top-level searcher, and then call getValues(LeafReaderContext, DoubleValues) on the resulting DoubleValuesSource.

DoubleValuesSource objects for NumericDocValues fields can be obtained by calling fromDoubleField(String), fromFloatField(String), fromIntField(String) or fromLongField(String), or from fromField(String, LongToDoubleFunction) if special long-to-double encoding is required.

Scores may be used as a source for value calculations by wrapping a Scorer using fromScorer(Scorable) and passing the resulting DoubleValues to getValues(LeafReaderContext, DoubleValues). The scores can then be accessed using the SCORES DoubleValuesSource.

  • Field Details

  • Constructor Details

    • DoubleValuesSource

      public DoubleValuesSource()
  • Method Details

    • getValues

      public abstract DoubleValues getValues(LeafReaderContext ctx, DoubleValues scores) throws IOException
      Returns a DoubleValues instance for the passed-in LeafReaderContext and scores

      If scores are not needed to calculate the values (ie returns false, callers may safely pass null for the scores parameter.

      Throws:
      IOException
    • needsScores

      public abstract boolean needsScores()
      Return true if document scores are needed to calculate values
    • explain

      public Explanation explain(LeafReaderContext ctx, int docId, Explanation scoreExplanation) throws IOException
      An explanation of the value for the named document.
      Parameters:
      ctx - the readers context to create the Explanation for.
      docId - the document's id relative to the given context's reader
      Returns:
      an Explanation for the value
      Throws:
      IOException - if an IOException occurs
    • rewrite

      public abstract DoubleValuesSource rewrite(IndexSearcher reader) throws IOException
      Return a DoubleValuesSource specialised for the given IndexSearcher

      Implementations should assume that this will only be called once. IndexReader-independent implementations can just return this

      Queries that use DoubleValuesSource objects should call rewrite() during Query.createWeight(IndexSearcher, ScoreMode, float) rather than during Query.rewrite(IndexReader) to avoid IndexReader reference leakage.

      For the same reason, implementations that cache references to the IndexSearcher should return a new object from this method.

      Throws:
      IOException
    • getSortField

      public SortField getSortField(boolean reverse)
      Create a sort field based on the value of this producer
      Parameters:
      reverse - true if the sort should be decreasing
    • hashCode

      public abstract int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public abstract boolean equals(Object obj)
      Overrides:
      equals in class Object
    • toString

      public abstract String toString()
      Overrides:
      toString in class Object
    • toLongValuesSource

      public final LongValuesSource toLongValuesSource()
      Convert to a LongValuesSource by casting the double values to longs
    • fromField

      public static DoubleValuesSource fromField(String field, LongToDoubleFunction decoder)
      Creates a DoubleValuesSource that wraps a generic NumericDocValues field
      Parameters:
      field - the field to wrap, must have NumericDocValues
      decoder - a function to convert the long-valued doc values to doubles
    • fromDoubleField

      public static DoubleValuesSource fromDoubleField(String field)
      Creates a DoubleValuesSource that wraps a double-valued field
    • fromFloatField

      public static DoubleValuesSource fromFloatField(String field)
      Creates a DoubleValuesSource that wraps a float-valued field
    • fromLongField

      public static DoubleValuesSource fromLongField(String field)
      Creates a DoubleValuesSource that wraps a long-valued field
    • fromIntField

      public static DoubleValuesSource fromIntField(String field)
      Creates a DoubleValuesSource that wraps an int-valued field
    • constant

      public static DoubleValuesSource constant(double value)
      Creates a DoubleValuesSource that always returns a constant value
    • fromScorer

      public static DoubleValues fromScorer(Scorable scorer)
      Returns a DoubleValues instance that wraps scores returned by a Scorer.

      Note: If you intend to call Scorable.score() on the provided scorer separately, you may want to consider wrapping it with ScoreCachingWrappingScorer.wrap(Scorable) to avoid computing the actual score multiple times.

    • fromQuery

      public static DoubleValuesSource fromQuery(Query query)
      Create a DoubleValuesSource that returns the score of a particular query