Package org.apache.lucene.expressions

# 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 DoubleValuesSource instances
       SimpleBindings bindings = new SimpleBindings();
       bindings.add("_score", DoubleValuesSource.SCORES);
       bindings.add("popularity", DoubleValuesSource.fromIntField("popularity"));

       // 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 DoubleValuesSource instances
       SimpleBindings bindings = new SimpleBindings();
       bindings.add("_score", DoubleValuesSource.SCORES);
       bindings.add("popularity", DoubleValuesSource.fromIntField("popularity"));

       // 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:
  - `JavascriptCompiler.compile(java.lang.String)`
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`
`sourceText`
The original source text
`final String[]`
`variables`
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(DoubleValues[] functionValues)`
Evaluates the expression for the current document.
`DoubleValuesSource`
`getDoubleValuesSource(Bindings bindings)`
Get a DoubleValuesSource which can compute the value of this expression in the context of the given bindings.
`Rescorer`
`getRescorer(Bindings bindings)`
Get a `Rescorer`, to rescore first-pass hits using this expression.
`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(DoubleValues[] functionValues) throws IOException
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.
Throws:
  `IOException`

### getDoubleValuesSource

public 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 SortField getSortField(Bindings bindings, boolean reverse)
Get a sort field which can be used to rank documents by this expression.

### getRescorer

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