Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-3814

Manhattan distance function is incorrect, not absolute distance between coordinates

Details

    • 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

          Activity

            People

              dsmiley David Smiley
              nhooey Neil Hooey
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: