From d896eab989e157353da3559feba4f4c4cb988746 Mon Sep 17 00:00:00 2001 From: nknize Date: Fri, 8 Apr 2016 10:55:40 -0500 Subject: [PATCH 1/4] minor trimming from spatial module's GeoEncodingUtils --- .../search/GeoPointDistanceQuery.java | 5 ++--- .../geopoint/search/GeoPointInBBoxQuery.java | 2 -- .../search/GeoPointInPolygonQuery.java | 3 +-- .../lucene/spatial/util/GeoEncodingUtils.java | 20 +++++++------------ .../spatial/util/TestGeoEncodingUtils.java | 5 +++-- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointDistanceQuery.java b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointDistanceQuery.java index 9e90a11af8c..a6cf35cd557 100644 --- a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointDistanceQuery.java +++ b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointDistanceQuery.java @@ -31,9 +31,8 @@ import org.apache.lucene.geo.GeoUtils; * circle. Terms * passing this initial filter are then passed to a secondary {@code postFilter} method that verifies whether the * decoded lat/lon point fall within the specified query distance (see {@link org.apache.lucene.util.SloppyMath#haversinMeters(double, double, double, double)}. - * All morton value comparisons are subject to the same precision tolerance defined in - * {@value org.apache.lucene.spatial.util.GeoEncodingUtils#TOLERANCE} and distance comparisons are subject to the accuracy of the - * haversine formula (from R.W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol. 68, no. 2, 1984, p. 159) + * Distance comparisons are subject to the accuracy of the haversine formula + * (from R.W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol. 68, no. 2, 1984, p. 159) * *

Note: This query currently uses haversine which is a sloppy distance calculation (see above reference). For large * queries one can expect upwards of 400m error. Vincenty shrinks this to ~40m error but pays a penalty for computing diff --git a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInBBoxQuery.java b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInBBoxQuery.java index f30950e3125..1634d45d39b 100644 --- a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInBBoxQuery.java +++ b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInBBoxQuery.java @@ -31,8 +31,6 @@ import org.apache.lucene.geo.GeoUtils; * range based on the morton codes of the min and max lat/lon pairs. Terms * passing this initial filter are passed to a final check that verifies whether * the decoded lat/lon falls within (or on the boundary) of the query bounding box. - * The value comparisons are subject to a precision tolerance defined in - * {@value org.apache.lucene.spatial.util.GeoEncodingUtils#TOLERANCE} * * NOTES: * 1. All latitude/longitude values must be in decimal degrees. diff --git a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInPolygonQuery.java b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInPolygonQuery.java index a06bdc07149..26af78e1824 100644 --- a/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInPolygonQuery.java +++ b/lucene/spatial/src/java/org/apache/lucene/spatial/geopoint/search/GeoPointInPolygonQuery.java @@ -33,8 +33,7 @@ import org.apache.lucene.geo.Polygon; * of the min and max lat/lon pairs. Terms passing this initial filter are passed * to a secondary filter that verifies whether the decoded lat/lon point falls within * (or on the boundary) of the bounding box query. Finally, the remaining candidate - * term is passed to the final point in polygon check. All value comparisons are subject - * to the same precision tolerance defined in {@value GeoEncodingUtils#TOLERANCE} + * term is passed to the final point in polygon check. * * @see Polygon * @lucene.experimental diff --git a/lucene/spatial/src/java/org/apache/lucene/spatial/util/GeoEncodingUtils.java b/lucene/spatial/src/java/org/apache/lucene/spatial/util/GeoEncodingUtils.java index d2141d93c15..95aea2aa322 100644 --- a/lucene/spatial/src/java/org/apache/lucene/spatial/util/GeoEncodingUtils.java +++ b/lucene/spatial/src/java/org/apache/lucene/spatial/util/GeoEncodingUtils.java @@ -41,10 +41,7 @@ public final class GeoEncodingUtils { * for encoding geoEncoded values. * @see #geoCodedToPrefixCodedBytes(long, int, BytesRefBuilder) */ - public static final int BUF_SIZE_LONG = 28/8 + 1; - - /** rounding error for quantized latitude and longitude values */ - public static final double TOLERANCE = 1E-6; + private static final int BUF_SIZE_LONG = 28/8 + 1; // No instance: private GeoEncodingUtils() { @@ -91,8 +88,12 @@ public final class GeoEncodingUtils { /** Convert a prefix coded geo term back into the geocoded morton long */ public static long prefixCodedToGeoCoded(final BytesRef val) { - final long result = fromBytes((byte)0, (byte)0, (byte)0, (byte)0, - val.bytes[val.offset+0], val.bytes[val.offset+1], val.bytes[val.offset+2], val.bytes[val.offset+3]); + final long result = 0L + | (val.bytes[val.offset+0] & 255L) << 24 + | (val.bytes[val.offset+1] & 255L) << 16 + | (val.bytes[val.offset+2] & 255L) << 8 + | val.bytes[val.offset+3] & 255L; + return result << 32; } @@ -130,13 +131,6 @@ public final class GeoEncodingUtils { return shift; } - /** Converts 8 bytes to a long value */ - protected static long fromBytes(byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8) { - return ((long)b1 & 255L) << 56 | ((long)b2 & 255L) << 48 | ((long)b3 & 255L) << 40 - | ((long)b4 & 255L) << 32 | ((long)b5 & 255L) << 24 | ((long)b6 & 255L) << 16 - | ((long)b7 & 255L) << 8 | (long)b8 & 255L; - } - /** Converts a long value into a bit string (useful for debugging) */ public static String geoTermToString(long term) { StringBuilder s = new StringBuilder(64); diff --git a/lucene/spatial/src/test/org/apache/lucene/spatial/util/TestGeoEncodingUtils.java b/lucene/spatial/src/test/org/apache/lucene/spatial/util/TestGeoEncodingUtils.java index 1a1b2cc5529..aab0de0c608 100644 --- a/lucene/spatial/src/test/org/apache/lucene/spatial/util/TestGeoEncodingUtils.java +++ b/lucene/spatial/src/test/org/apache/lucene/spatial/util/TestGeoEncodingUtils.java @@ -61,8 +61,9 @@ public class TestGeoEncodingUtils extends LuceneTestCase { double latEnc = GeoEncodingUtils.mortonUnhashLat(enc); double lonEnc = GeoEncodingUtils.mortonUnhashLon(enc); - assertEquals("lat=" + lat + " latEnc=" + latEnc + " diff=" + (lat - latEnc), lat, latEnc, GeoEncodingUtils.TOLERANCE); - assertEquals("lon=" + lon + " lonEnc=" + lonEnc + " diff=" + (lon - lonEnc), lon, lonEnc, GeoEncodingUtils.TOLERANCE); + // todo remove tolerance + assertEquals("lat=" + lat + " latEnc=" + latEnc + " diff=" + (lat - latEnc), lat, latEnc, 1e-6); + assertEquals("lon=" + lon + " lonEnc=" + lonEnc + " diff=" + (lon - lonEnc), lon, lonEnc, 1e-6); } } From 0cf6c551191432f9573122d3838dc58b59776ff1 Mon Sep 17 00:00:00 2001 From: Steve Rowe Date: Fri, 8 Apr 2016 12:26:35 -0400 Subject: [PATCH 2/4] LUCENE-7174: IntelliJ config: switch JUnit library to include all jars under lucene/test-framework/lib/, rather than using the exact jar names, which is brittle, and causes trouble when people forget to update when jars are upgraded (like on this issue) --- dev-tools/idea/.idea/libraries/JUnit.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-tools/idea/.idea/libraries/JUnit.xml b/dev-tools/idea/.idea/libraries/JUnit.xml index f6bdd9b6e33..4a6da924ae5 100644 --- a/dev-tools/idea/.idea/libraries/JUnit.xml +++ b/dev-tools/idea/.idea/libraries/JUnit.xml @@ -1,10 +1,10 @@ - - + + \ No newline at end of file From 65bfc19f98b83212ced82a7efed66ec7d706050a Mon Sep 17 00:00:00 2001 From: Steve Rowe Date: Fri, 8 Apr 2016 12:27:48 -0400 Subject: [PATCH 3/4] LUCENE-7174: IntelliJ config: remove trailing slashes on dir names to make IntelliJ happy --- dev-tools/idea/.idea/libraries/JUnit.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-tools/idea/.idea/libraries/JUnit.xml b/dev-tools/idea/.idea/libraries/JUnit.xml index 4a6da924ae5..bb159b0b046 100644 --- a/dev-tools/idea/.idea/libraries/JUnit.xml +++ b/dev-tools/idea/.idea/libraries/JUnit.xml @@ -1,10 +1,10 @@ - + - + \ No newline at end of file From 48f77829f414a67919be3724308824592fb4ee7d Mon Sep 17 00:00:00 2001 From: nknize Date: Fri, 8 Apr 2016 14:19:38 -0500 Subject: [PATCH 4/4] adds 6.0.0 back compat test indexes --- .../index/TestBackwardsCompatibility.java | 4 +++- .../org/apache/lucene/index/index.6.0.0-cfs.zip | Bin 0 -> 13744 bytes .../apache/lucene/index/index.6.0.0-nocfs.zip | Bin 0 -> 13749 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-cfs.zip create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-nocfs.zip diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java index bc48c7a6554..6c14efec626 100644 --- a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java +++ b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java @@ -341,7 +341,9 @@ public class TestBackwardsCompatibility extends LuceneTestCase { "5.4.1-cfs", "5.4.1-nocfs", "5.5.0-cfs", - "5.5.0-nocfs" + "5.5.0-nocfs", + "6.0.0-cfs", + "6.0.0-nocfs" }; // TODO: on 6.0.0 release, gen the single segment indices and add here: diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-cfs.zip b/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-cfs.zip new file mode 100644 index 0000000000000000000000000000000000000000..29939705f00cda890e63c90e4b768cdb8e653270 GIT binary patch literal 13744 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 u?_W`TbRfTt^1mwczZ~fbh`&c=uoaC4z_m literal 0 HcmV?d00001 diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-nocfs.zip b/lucene/backward-codecs/src/test/org/apache/lucene/index/index.6.0.0-nocfs.zip new file mode 100644 index 0000000000000000000000000000000000000000..55b5cc1d104e902f3045a4cc029c577a4834585e GIT binary patch literal 13749 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 KkRZeNcmD_LHHqB- literal 0 HcmV?d00001