From: Sarah Hoffmann Date: Fri, 14 Jul 2023 19:55:07 +0000 (+0200) Subject: penalize search with frequent partials X-Git-Tag: v4.3.0~51^2~7 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/8366e4ca8340cd3994c282067804fb047037250f penalize search with frequent partials Avoid search against frequent partials if we have already looked for the full name equivalents. --- 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: