Class Expression

java.lang.Object
org.apache.lucene.expressions.Expression

public abstract class Expression extends Object
Base class that computes the value of an expression for a document.

Example that sorts based on an expression:

   // compile an expression:
   Expression expr = JavascriptCompiler.compile("sqrt(_score) + ln(popularity)");

   // SimpleBindings just maps variables to SortField instances
   SimpleBindings bindings = new SimpleBindings();
   bindings.add(new SortField("_score", SortField.Type.SCORE));
   bindings.add(new SortField("popularity", SortField.Type.INT));

   // create a sort field and sort by it (reverse order)
   Sort sort = new Sort(expr.getSortField(bindings, true));
   Query query = new TermQuery(new Term("body", "contents"));
   searcher.search(query, 10, sort);
 

Example that modifies the scores produced by the query:

   // compile an expression:
   Expression expr = JavascriptCompiler.compile("sqrt(_score) + ln(popularity)");

   // SimpleBindings just maps variables to SortField instances
   SimpleBindings bindings = new SimpleBindings();
   bindings.add(new SortField("_score", SortField.Type.SCORE));
   bindings.add(new SortField("popularity", SortField.Type.INT));

   // create a query that matches based on body:contents but
   // scores using expr
   Query query = new FunctionScoreQuery(
       new TermQuery(new Term("body", "contents")),
       expr.getDoubleValuesSource(bindings));
   searcher.search(query, 10);
 
See Also:
WARNING: This API is experimental and might change in incompatible ways in the next release.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    final String
    The original source text
    final String[]
    Named variables referred to by this expression
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Expression(String sourceText, String[] variables)
    Creates a new Expression.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract double
    evaluate(org.apache.lucene.search.DoubleValues[] functionValues)
    Evaluates the expression for the current document.
    org.apache.lucene.search.DoubleValuesSource
    Get a DoubleValuesSource which can compute the value of this expression in the context of the given bindings.
    org.apache.lucene.search.Rescorer
    Get a Rescorer, to rescore first-pass hits using this expression.
    org.apache.lucene.search.SortField
    getSortField(Bindings bindings, boolean reverse)
    Get a sort field which can be used to rank documents by this expression.

    Methods inherited from class java.lang.Object

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

    • sourceText

      public final String sourceText
      The original source text
    • variables

      public final String[] variables
      Named variables referred to by this expression
  • Constructor Details

    • Expression

      protected Expression(String sourceText, String[] variables)
      Creates a new Expression.
      Parameters:
      sourceText - Source text for the expression: e.g. ln(popularity)
      variables - Names of external variables referred to by the expression
  • Method Details

    • evaluate

      public abstract double evaluate(org.apache.lucene.search.DoubleValues[] functionValues)
      Evaluates the expression for the current document.
      Parameters:
      functionValues - DoubleValues for each element of variables.
      Returns:
      The computed value of the expression for the given document.
    • getDoubleValuesSource

      public org.apache.lucene.search.DoubleValuesSource getDoubleValuesSource(Bindings bindings)
      Get a DoubleValuesSource which can compute the value of this expression in the context of the given bindings.
      Parameters:
      bindings - Bindings to use for external values in this expression
      Returns:
      A DoubleValuesSource which will evaluate this expression when used
    • getSortField

      public org.apache.lucene.search.SortField getSortField(Bindings bindings, boolean reverse)
      Get a sort field which can be used to rank documents by this expression.
    • getRescorer

      public org.apache.lucene.search.Rescorer getRescorer(Bindings bindings)
      Get a Rescorer, to rescore first-pass hits using this expression.