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

LatLonShapePolygonQuery returning incorrect WITHIN results with shared boundaries

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Reopened
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: 8.1, master (9.0)
    • Component/s: None
    • Labels:
      None
    • Lucene Fields:
      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. LUCENE-8736.patch
          40 kB
          Nick Knize
        2. adaptive-decoding.patch
          8 kB
          Ignacio Vera
        3. LUCENE-8736.patch
          27 kB
          Nick Knize

          Activity

            People

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

              Dates

              • Created:
                Updated: