Expert: obtains the ordinal of the field value from the default Lucene
/// {@link Lucene.Net.Search.FieldCache FieldCache} using getStringIndex()
/// and reverses the order.
///
/// The native lucene index order is used to assign an ordinal value for each field value.
///
/// Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1.
///
/// Example of reverse ordinal (rord):
///
If there were only three field values: "apple","banana","pear"
///
then rord("apple")=3, rord("banana")=2, ord("pear")=1
///
/// WARNING:
/// rord() depends on the position in an index and can thus change
/// when other documents are inserted or deleted,
/// or if a MultiSearcher is used.
///
///
/// WARNING: The status of the search.function package is experimental.
/// The APIs introduced here might change in the future and will not be
/// supported anymore in such a case.
///
///
[Serializable]
public class ReverseOrdFieldSource : ValueSource
{
private class AnonymousClassDocValues : DocValues
{
public AnonymousClassDocValues(int end, int[] arr, ReverseOrdFieldSource enclosingInstance)
{
InitBlock(end, arr, enclosingInstance);
}
private void InitBlock(int end, int[] arr, ReverseOrdFieldSource enclosingInstance)
{
this.end = end;
this.arr = arr;
this.enclosingInstance = enclosingInstance;
}
private int end;
private int[] arr;
private ReverseOrdFieldSource enclosingInstance;
public ReverseOrdFieldSource Enclosing_Instance
{
get
{
return enclosingInstance;
}
}
/*(non-Javadoc) @see Lucene.Net.Search.Function.DocValues#floatVal(int) */
public override float FloatVal(int doc)
{
return (float) (end - arr[doc]);
}
/* (non-Javadoc) @see Lucene.Net.Search.Function.DocValues#intVal(int) */
public override int IntVal(int doc)
{
return end - arr[doc];
}
/* (non-Javadoc) @see Lucene.Net.Search.Function.DocValues#strVal(int) */
public override System.String StrVal(int doc)
{
// the string value of the ordinal, not the string itself
return System.Convert.ToString(IntVal(doc));
}
/*(non-Javadoc) @see Lucene.Net.Search.Function.DocValues#toString(int) */
public override System.String ToString(int doc)
{
return Enclosing_Instance.Description() + '=' + StrVal(doc);
}
/*(non-Javadoc) @see Lucene.Net.Search.Function.DocValues#getInnerArray() */
public /*internal*/ override object GetInnerArray()
{
return arr;
}
}
public System.String field;
///