]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #3655 from lonvia/remove-name-ranking-in-postcode-search
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 20 Feb 2025 13:32:43 +0000 (14:32 +0100)
committerGitHub <noreply@github.com>
Thu, 20 Feb 2025 13:32:43 +0000 (14:32 +0100)
Tweak penalties for postcode searches

src/nominatim_api/search/db_search_builder.py
src/nominatim_api/search/db_searches.py

index a6335c1377c0eada94fb0a3554d31aa48d2e1742..a67db1e3324dc2974abfc37f91f7fdf53799fc12 100644 (file)
@@ -148,7 +148,6 @@ class SearchBuilder:
                                                  [t.token for r in address
                                                   for t in self.query.get_partials_list(r)],
                                                  lookups.Restrict)]
-                penalty += 0.2
             yield dbs.PostcodeSearch(penalty, sdata)
 
     def build_housenumber_search(self, sdata: dbf.SearchData, hnrs: List[Token],
index 3a4c826fd871c0a60725d62188066e0bbd9ae7d9..8e37c7482d11a8e7251ebfe105d69669113487c5 100644 (file)
@@ -581,9 +581,13 @@ class PostcodeSearch(AbstractSearch):
                      .where((tsearch.c.name_vector + tsearch.c.nameaddress_vector)
                             .contains(sa.type_coerce(self.lookups[0].tokens,
                                                      IntArray)))
+            # Do NOT add rerank penalties based on the address terms.
+            # The standard rerank penalty only checks the address vector
+            # while terms may appear in name and address vector. This would
+            # lead to overly high penalties.
+            # We assume that a postcode is precise enough to not require
+            # additional full name matches.
 
-        for ranking in self.rankings:
-            penalty += ranking.sql_penalty(conn.t.search_name)
         penalty += sa.case(*((t.c.postcode == v, p) for v, p in self.postcodes),
                            else_=1.0)