Class VectorDistanceFunction

java.lang.Object
org.apache.lucene.queries.function.ValueSource
org.apache.solr.search.function.distance.VectorDistanceFunction
Direct Known Subclasses:
SquaredEuclideanFunction

public class VectorDistanceFunction extends org.apache.lucene.queries.function.ValueSource
Calculate the p-norm for a Vector. See http://en.wikipedia.org/wiki/Lp_space

Common cases:

  • 0 = Sparseness calculation
  • 1 = Manhattan distance
  • 2 = Euclidean distance
  • Integer.MAX_VALUE = infinite norm
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected float
     
    protected float
     
    protected org.apache.lucene.queries.function.valuesource.MultiValueSource
     
    protected org.apache.lucene.queries.function.valuesource.MultiValueSource
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    VectorDistanceFunction(float power, org.apache.lucene.queries.function.valuesource.MultiValueSource source1, org.apache.lucene.queries.function.valuesource.MultiValueSource source2)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    createWeight(Map<Object,Object> context, org.apache.lucene.search.IndexSearcher searcher)
     
     
    protected double
    distance(int doc, org.apache.lucene.queries.function.FunctionValues dv1, org.apache.lucene.queries.function.FunctionValues dv2)
    Calculate the distance
    static double
    distSquaredCartesian(double[] vec1, double[] vec2)
    The square of the cartesian Distance.
    boolean
     
    org.apache.lucene.queries.function.FunctionValues
    getValues(Map<Object,Object> context, org.apache.lucene.index.LeafReaderContext readerContext)
     
    int
     
    protected String
     
    static double
    vectorDistance(double[] vec1, double[] vec2, double power)
    Calculate the p-norm (i.e.
    static double
    vectorDistance(double[] vec1, double[] vec2, double power, double oneOverPower)
    Calculate the p-norm (i.e.

    Methods inherited from class org.apache.lucene.queries.function.ValueSource

    asDoubleValuesSource, asLongValuesSource, fromDoubleValuesSource, getSortField, newContext, toString

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • source1

      protected org.apache.lucene.queries.function.valuesource.MultiValueSource source1
    • source2

      protected org.apache.lucene.queries.function.valuesource.MultiValueSource source2
    • power

      protected float power
    • oneOverPower

      protected float oneOverPower
  • Constructor Details

    • VectorDistanceFunction

      public VectorDistanceFunction(float power, org.apache.lucene.queries.function.valuesource.MultiValueSource source1, org.apache.lucene.queries.function.valuesource.MultiValueSource source2)
  • Method Details

    • name

      protected String name()
    • distance

      protected double distance(int doc, org.apache.lucene.queries.function.FunctionValues dv1, org.apache.lucene.queries.function.FunctionValues dv2) throws IOException
      Calculate the distance
      Parameters:
      doc - The current doc
      dv1 - The values from the first MultiValueSource
      dv2 - The values from the second MultiValueSource
      Returns:
      The distance
      Throws:
      IOException
    • vectorDistance

      public static double vectorDistance(double[] vec1, double[] vec2, double power)
      Calculate the p-norm (i.e. length) between two vectors.

      See Lp space

      Parameters:
      vec1 - The first vector
      vec2 - The second vector
      power - The power (2 for cartesian distance, 1 for manhattan, etc.)
      Returns:
      The length.
      See Also:
    • vectorDistance

      public static double vectorDistance(double[] vec1, double[] vec2, double power, double oneOverPower)
      Calculate the p-norm (i.e. length) between two vectors.
      Parameters:
      vec1 - The first vector
      vec2 - The second vector
      power - The power (2 for cartesian distance, 1 for manhattan, etc.)
      oneOverPower - If you've pre-calculated oneOverPower and cached it, use this method to save one division operation over vectorDistance(double[], double[], double).
      Returns:
      The length.
    • distSquaredCartesian

      public static double distSquaredCartesian(double[] vec1, double[] vec2)
      The square of the cartesian Distance. Not really a distance, but useful if all that matters is comparing the result to another one.
      Parameters:
      vec1 - The first point
      vec2 - The second point
      Returns:
      The squared cartesian distance
    • getValues

      public org.apache.lucene.queries.function.FunctionValues getValues(Map<Object,Object> context, org.apache.lucene.index.LeafReaderContext readerContext) throws IOException
      Specified by:
      getValues in class org.apache.lucene.queries.function.ValueSource
      Throws:
      IOException
    • createWeight

      public void createWeight(Map<Object,Object> context, org.apache.lucene.search.IndexSearcher searcher) throws IOException
      Overrides:
      createWeight in class org.apache.lucene.queries.function.ValueSource
      Throws:
      IOException
    • equals

      public boolean equals(Object o)
      Specified by:
      equals in class org.apache.lucene.queries.function.ValueSource
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in class org.apache.lucene.queries.function.ValueSource
    • description

      public String description()
      Specified by:
      description in class org.apache.lucene.queries.function.ValueSource