From 8366e4ca8340cd3994c282067804fb047037250f Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Fri, 14 Jul 2023 21:55:07 +0200 Subject: [PATCH] penalize search with frequent partials Avoid search against frequent partials if we have already looked for the full name equivalents. --- nominatim/api/search/db_search_builder.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nominatim/api/search/db_search_builder.py b/nominatim/api/search/db_search_builder.py index d18fa964..ee06dba5 100644 --- a/nominatim/api/search/db_search_builder.py +++ b/nominatim/api/search/db_search_builder.py @@ -247,8 +247,12 @@ class SearchBuilder: lookup = [dbf.FieldLookup('name_vector', non_rare_names, 'lookup_any')] if addr_tokens: lookup.append(dbf.FieldLookup('nameaddress_vector', addr_tokens, 'lookup_all')) - yield penalty + 0.1 * max(0, 5 - len(name_partials) - len(addr_tokens)),\ - min(exp_name_count, exp_addr_count), lookup + penalty += 0.1 * max(0, 5 - len(name_partials) - len(addr_tokens)) + if len(rare_names) == len(name_fulls): + # if there already was a search for all full tokens, + # avoid this if anything has been found + penalty += 0.25 + yield penalty, min(exp_name_count, exp_addr_count), lookup def get_name_ranking(self, trange: TokenRange) -> dbf.FieldRanking: -- 2.39.5