diff --git a/nominatim/api/logging.py b/nominatim/api/logging.py index a4da357d..6c8b1b38 100644 --- a/nominatim/api/logging.py +++ b/nominatim/api/logging.py @@ -178,7 +178,7 @@ class HTMLLogger(BaseLogger): self._write(f"rank={res.rank_address}, ") self._write(f"osm={format_osm(res.osm_object)}, ") self._write(f'cc={res.country_code}, ') - self._write(f'importance={res.importance or -1:.5f})') + self._write(f'importance={res.importance or float("nan"):.5f})') total += 1 self._write(f'TOTAL: {total}
') diff --git a/nominatim/api/search/db_search_builder.py b/nominatim/api/search/db_search_builder.py index b6ba211c..9ff8c03c 100644 --- a/nominatim/api/search/db_search_builder.py +++ b/nominatim/api/search/db_search_builder.py @@ -141,12 +141,14 @@ class SearchBuilder: yield dbs.CountrySearch(sdata) if sdata.postcodes and (is_category or self.configured_for_postcode): + penalty = 0.0 if sdata.countries else 0.1 if address: sdata.lookups = [dbf.FieldLookup('nameaddress_vector', [t.token for r in address for t in self.query.get_partials_list(r)], 'restrict')] - yield dbs.PostcodeSearch(0.4, sdata) + penalty += 0.2 + yield dbs.PostcodeSearch(penalty, sdata) def build_housenumber_search(self, sdata: dbf.SearchData, hnrs: List[Token], diff --git a/nominatim/api/search/db_searches.py b/nominatim/api/search/db_searches.py index db35f726..ba4a3995 100644 --- a/nominatim/api/search/db_searches.py +++ b/nominatim/api/search/db_searches.py @@ -562,6 +562,8 @@ class PlaceSearch(AbstractSearch): sql = sql.where(tsearch.c.country_code.in_(self.countries.values)) if self.postcodes: + # if a postcode is given, don't search for state or country level objects + sql = sql.where(tsearch.c.address_rank > 9) tpc = conn.t.postcode if self.expected_count > 1000: # Many results expected. Restrict by postcode. diff --git a/nominatim/api/search/token_assignment.py b/nominatim/api/search/token_assignment.py index 747fea6c..11da2359 100644 --- a/nominatim/api/search/token_assignment.py +++ b/nominatim/api/search/token_assignment.py @@ -270,7 +270,12 @@ class _TokenSequence: if (base.postcode.start == 0 and self.direction != -1)\ or (base.postcode.end == query.num_token_slots() and self.direction != 1): log().comment('postcode search') - yield dataclasses.replace(base, penalty=self.penalty) + # ,