## 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
`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
Modifier and Type Method Description
`void` ```createWeight​(Map<Object,​Object> 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<Object,​Object> 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`
• ### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`
• ### 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.
`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<Object,​Object> context,
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`