Spatial Search skipping records when one location is close to origin, another is away and radius is wider ---------------------------------------------------------------------------------------------------------
Key: LUCENENET-483 URL: https://issues.apache.org/jira/browse/LUCENENET-483 Project: Lucene.Net Issue Type: Bug Components: Lucene.Net Contrib Affects Versions: Lucene.Net 2.9.4g, Lucene.Net 2.9.4 Environment: .Net framework 4.0 Reporter: Aleksandar Panov Running a spatial query against two locations where one location is close to origin (less than a mile), another one is away (24 miles) and radius is wider (52 miles) returns only one result. Running query with a bit wider radius (53.8) returns 2 results. {code} // Origin private double _lat = 42.350153; private double _lng = -71.061667; private const string LatField = "lat"; private const string LngField = "lng"; //Locations AddPoint(writer, "Location 1", 42.0, -71.0); //24 miles away from origin AddPoint(writer, "Location 2", 42.35, -71.06); //less than a mile [TestMethod] public void TestAntiM() { _directory = new RAMDirectory(); var writer = new IndexWriter(_directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); SetUpPlotter(2, 15); AddData(writer); _searcher = new IndexSearcher(_directory, true); //const double miles = 53.8; // Correct. Returns 2 Locations. const double miles = 52; // Incorrect. Returns 1 Location. 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 2 " + distances.Count); Console.WriteLine("Results should be 2 " + results); Assert.AreEqual(2, distances.Count); // fixed a store of only needed distances Assert.AreEqual(2, results); } {code} -- 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