Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
4.0-ALPHA
-
New
Description
The Lucene vectorDistance() function's Manhattan distance function is incorrect.
Wikipedia says: http://en.wikipedia.org/wiki/Manhattan_distance
"Taxicab geometry, blahblahblah, is a form of geometry in which the usual distance function or metric of Euclidean geometry is replaced by a new metric in which the distance between two points is the sum of the absolute differences of their coordinates."
The Lucene function isn't taking the absolute value before subtracting the vector coordinates.
I don't have a patch, but the offending code is here:
// lucene/contrib/spatial/src/java/org/apache/lucene/spatial/DistanceUtils.java } else if (power == 1.0) { for (int i = 0; i < vec1.length; i++) { result += vec1[i] - vec2[i]; }
It just needs to use Math.abs() when subtracting the coordinates.
Attachments
Issue Links
- is blocked by
-
LUCENE-5395 Upgrade Spatial4j to 0.4
- Resolved