]> git.openstreetmap.org Git - nominatim.git/commitdiff
penalize search with frequent partials
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 14 Jul 2023 19:55:07 +0000 (21:55 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 17 Jul 2023 14:27:25 +0000 (16:27 +0200)
Avoid search against frequent partials if we have already looked for
the full name equivalents.

nominatim/api/search/db_search_builder.py

index d18fa96424ddf49a2e307654a719c555811ef2bb..ee06dba5ef95f916bceb10edc9148366a1ba0d8b 100644 (file)
@@ -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: