Nicholas Knize created LUCENE-8736:
--------------------------------------
Summary: LatLonShapePolygonQuery returning incorrect WITHIN
results with shared boundaries
Key: LUCENE-8736
URL: https://issues.apache.org/jira/browse/LUCENE-8736
Project: Lucene - Core
Issue Type: Bug
Reporter: Nicholas Knize
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:
{code:java}
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);
}
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]