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

LatLonShapePolygonQuery returning incorrect WITHIN results with shared boundaries

Details

    • Bug
    • Status: Reopened
    • Major
    • Resolution: Unresolved
    • None
    • 8.1
    • None
    • None
    • New

    Description

      Triangles that are WITHIN a target polygon query that also share a boundary with the polygon are incorrectly reported as CROSSES instead of INSIDE. This leads to incorrect WITHIN query results as demonstrated in the following test:

        public void testWithinFailure() throws Exception {
          Directory dir = newDirectory();
          RandomIndexWriter w = new RandomIndexWriter(random(), dir);
      
          // test polygons:
          Polygon indexPoly1 = new Polygon(new double[] {4d, 4d, 3d, 3d, 4d}, new double[] {3d, 4d, 4d, 3d, 3d});
          Polygon indexPoly2 = new Polygon(new double[] {2d, 2d, 1d, 1d, 2d}, new double[] {6d, 7d, 7d, 6d, 6d});
          Polygon indexPoly3 = new Polygon(new double[] {1d, 1d, 0d, 0d, 1d}, new double[] {3d, 4d, 4d, 3d, 3d});
          Polygon indexPoly4 = new Polygon(new double[] {2d, 2d, 1d, 1d, 2d}, new double[] {0d, 1d, 1d, 0d, 0d});
      
          // index polygons:
          Document doc;
          addPolygonsToDoc(FIELDNAME, doc = new Document(), indexPoly1);
          w.addDocument(doc);
          addPolygonsToDoc(FIELDNAME, doc = new Document(), indexPoly2);
          w.addDocument(doc);
          addPolygonsToDoc(FIELDNAME, doc = new Document(), indexPoly3);
          w.addDocument(doc);
          addPolygonsToDoc(FIELDNAME, doc = new Document(), indexPoly4);
          w.addDocument(doc);
      
          ///// search //////
          IndexReader reader = w.getReader();
          w.close();
          IndexSearcher searcher = newSearcher(reader);
      
          Polygon[] searchPoly = new Polygon[] {new Polygon(new double[] {4d, 4d, 0d, 0d, 4d}, new double[] {0d, 7d, 7d, 0d, 0d})};
      
          Query q = LatLonShape.newPolygonQuery(FIELDNAME, QueryRelation.WITHIN, searchPoly);
          assertEquals(4, searcher.count(q));
          IOUtils.close(w, reader, dir);
        }
      

      Attachments

        1. adaptive-decoding.patch
          8 kB
          Ignacio Vera
        2. LUCENE-8736.patch
          40 kB
          Nick Knize
        3. LUCENE-8736.patch
          27 kB
          Nick Knize

        Activity

          People

            nknize Nick Knize
            nknize Nick Knize
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated: