You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Robert Muir (JIRA)" <ji...@apache.org> on 2016/04/02 05:50:25 UTC

[jira] [Updated] (LUCENE-7166) fix quantization bugs in LatLonPoint and GeoPointField, remove test leniency

     [ https://issues.apache.org/jira/browse/LUCENE-7166?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Robert Muir updated LUCENE-7166:
--------------------------------
    Attachment: LUCENE-7166.patch

Attached is a patch:
* fixes Geo random tests to not quantize query rectangles. 
* fixes testRectBoundariesAreInclusive to properly quantize its rectangle (for an exact inclusive test), and then test around that boundary with Math.nextUp/Math.nextDown
* fixes LatLonPoint encoding tests to not just use e.g. nextLatitude/nextLongitude, but to also walk the double space with Math.nextUp/nextDown.
* fixes LatLonPoint encoding to always correctly round down.
* fixes LatLonPoint box generation code to correctly round minimum values so false positives are never brought in.
* fixes GeoPoint bounding box impl to not quantize range endpoints at all, so false positives are never brought in.

Note that GeoPoint's quantization is still inconsistent. Its not always rounding down. I don't think it makes sense to fix that here, instead it will be easier to just fix it with LUCENE-7165. Instead I fixed it by just removing its quantization. Its box query is quite different from LatLonPoint: its a two-phase confirm approach already, so it weeds out the false positives that way (once i removed the bogus quantization of these endpoints). GeoPoint cannot be changed to work like LatLonPoint's bounding box (which is more efficient), until its encoding is fixed to have consistent rounding. This is no change from how it works today, but the inconsistency does kinda suck. 


> fix quantization bugs in LatLonPoint and GeoPointField, remove test leniency
> ----------------------------------------------------------------------------
>
>                 Key: LUCENE-7166
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7166
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Robert Muir
>         Attachments: LUCENE-7166.patch
>
>
> Currently a few remaining tests (around newRectQuery) are lenient and quantize the query rectangles. This is masking several bugs:
> 1. Both LatLonPoint and GeoPointField's bbox queries quantize their endpoints incorrectly at query-time, which can e.g. cause it to bring in false positive results
> 2. Tests have always been lenient about this (either by using epsilons or incorrectly quantizing the query rectangles in tests), hiding the above. 
> 3. Both LatLonPoint and GeoPointField still have rounding issues at quantization. For very special values they do not always consistently round in one direction.
> 4. Random encoding tests will never find the above issue, hiding it. This is because you need very special double values that the current stuff (e.g. {{-180 + 360.0 * random().nextDouble()}} will never find!).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org