Spatial Search skipping records with small radius e.g. 1 mile -------------------------------------------------------------
Key: LUCENENET-462 URL: https://issues.apache.org/jira/browse/LUCENENET-462 Project: Lucene.Net Issue Type: Bug Components: Lucene.Net Contrib Affects Versions: Lucene.Net 2.9.4 Environment: .Net framework 4.0 Reporter: Mark Rodseth Running a spatial query against a list of locations all within 1 mile of a location returns correct results for 2 miles, but incorrect results for 1 mile. For the one mile query, only 2 of the 8 rows are returned. Locations & Test below: // Origin private double _lat = 51.508129; private double _lng = -0.128005; private const string LatField = "lat"; private const string LngField = "lng"; // Locations AddPoint(writer, "Location 1", 51.5073802128877, -0.124669075012207); AddPoint(writer, "Location 2", 51.5091, -0.1235); AddPoint(writer, "Location 3", 51.5093, -0.1232); AddPoint(writer, "Location 4", 51.5112531582845, -0.12509822845459); AddPoint(writer, "Location 5", 51.5107, -0.123); AddPoint(writer, "Location 6", 51.512, -0.1246); AddPoint(writer, "Location 8", 51.5088760101322, -0.143165588378906); AddPoint(writer, "Location 9", 51.5087958793819, -0.143508911132813); [Test] public void TestAntiM() { _searcher = new IndexSearcher(_directory, true); const double miles = 1.0; // Bug? Only returns 2 locations. Should return 8. // const double miles = 2.0; // Correct. Returns 8 Locations. Console.WriteLine("testAntiM"); // create a distance query var dq = new DistanceQueryBuilder(_lat, _lng, miles, LatField, LngField, CartesianTierPlotter.DefaltFieldPrefix, true); Console.WriteLine(dq); //create a term query to search against all documents Query tq = new TermQuery(new Term("metafile", "doc")); var dsort = new DistanceFieldComparatorSource(dq.DistanceFilter); Sort sort = new Sort(new SortField("foo", dsort, false)); // Perform the search, using the term query, the distance filter, and the // distance sort TopDocs hits = _searcher.Search(tq, dq.Filter, 1000, sort); int results = hits.totalHits; ScoreDoc[] scoreDocs = hits.scoreDocs; // Get a list of distances Dictionary<int, Double> distances = dq.DistanceFilter.Distances; Console.WriteLine("Distance Filter filtered: " + distances.Count); Console.WriteLine("Results: " + results); Console.WriteLine("============================="); Console.WriteLine("Distances should be 8 " + distances.Count); Console.WriteLine("Results should be 8 " + results); Assert.AreEqual(8, distances.Count); // fixed a store of only needed distances Assert.AreEqual(8, results); } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira