Class 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:
    for the special case
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected float oneOverPower  
      protected float power  
      protected org.apache.lucene.queries.function.valuesource.MultiValueSource source1  
      protected org.apache.lucene.queries.function.valuesource.MultiValueSource source2  
    • 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

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void createWeight​(Map context, org.apache.lucene.search.IndexSearcher searcher)  
      String description()  
      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 equals​(Object o)  
      org.apache.lucene.queries.function.FunctionValues getValues​(Map context, org.apache.lucene.index.LeafReaderContext readerContext)  
      int hashCode()  
      protected String name()  
      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
    • Field Detail

      • 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 Detail

      • VectorDistanceFunction

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

      • 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(double[], double[], double, double)
      • 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 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 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