From 87a8c246a097cd9c218eb87871ba059d0435965a Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Sun, 1 Jun 2025 12:00:36 +0200 Subject: [PATCH] improve result cutting when a POI comes out with top importance --- src/nominatim_api/search/geocoder.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/nominatim_api/search/geocoder.py b/src/nominatim_api/search/geocoder.py index abf1a992..b48e96e8 100644 --- a/src/nominatim_api/search/geocoder.py +++ b/src/nominatim_api/search/geocoder.py @@ -118,17 +118,20 @@ class ForwardGeocoder: """ Remove badly matching results, sort by ranking and limit to the configured number of results. """ - if results: - results.sort(key=lambda r: (r.ranking, 0 if r.bbox is None else -r.bbox.area)) - min_rank = results[0].rank_search - min_ranking = results[0].ranking - results = SearchResults(r for r in results - if (r.ranking + 0.03 * (r.rank_search - min_rank) - < min_ranking + 0.5)) + results.sort(key=lambda r: (r.ranking, 0 if r.bbox is None else -r.bbox.area)) - results = SearchResults(results[:self.limit]) + final = SearchResults() + min_rank = results[0].rank_search + min_ranking = results[0].ranking - return results + for r in results: + if r.ranking + 0.03 * (r.rank_search - min_rank) < min_ranking + 0.5: + final.append(r) + min_rank = min(r.rank_search, min_rank) + if len(final) == self.limit: + break + + return final def rerank_by_query(self, query: QueryStruct, results: SearchResults) -> None: """ Adjust the accuracy of the localized result according to how well -- 2.39.5