From: Sarah Hoffmann Date: Tue, 26 Mar 2024 21:44:04 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~5 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/f2b2b2b92ca87fdf6ae8fcd7062db76ff4c42f51?hp=201b4689afaee3acfddd1fc7fe829fafc70667d6 Merge remote-tracking branch 'upstream/master' --- diff --git a/nominatim/api/search/db_search_builder.py b/nominatim/api/search/db_search_builder.py index 97e7ac02..e27a24d6 100644 --- a/nominatim/api/search/db_search_builder.py +++ b/nominatim/api/search/db_search_builder.py @@ -166,7 +166,7 @@ class SearchBuilder: sdata.lookups = [dbf.FieldLookup('name_vector', [t.token for t in hnrs], lookups.LookupAny)] expected_count = sum(t.count for t in hnrs) - partials = {t.token: t.count for trange in address + partials = {t.token: t.addr_count for trange in address for t in self.query.get_partials_list(trange)} if expected_count < 8000: @@ -222,6 +222,7 @@ class SearchBuilder: yield penalty, exp_count, dbf.lookup_by_names(list(name_partials.keys()), addr_tokens) return + addr_count = min(t.addr_count for t in addr_partials) if addr_partials else 30000 # Partial term to frequent. Try looking up by rare full names first. name_fulls = self.query.get_tokens(name, TokenType.WORD) if name_fulls: @@ -231,14 +232,16 @@ class SearchBuilder: if partials_indexed: penalty += 1.2 * sum(t.penalty for t in addr_partials if not t.is_indexed) - yield penalty,fulls_count / (2**len(addr_tokens)), \ - self.get_full_name_ranking(name_fulls, addr_partials, - fulls_count > 30000 / max(1, len(addr_tokens))) + if fulls_count < 50000 or addr_count < 30000: + yield penalty,fulls_count / (2**len(addr_tokens)), \ + self.get_full_name_ranking(name_fulls, addr_partials, + fulls_count > 30000 / max(1, len(addr_tokens))) # To catch remaining results, lookup by name and address # We only do this if there is a reasonable number of results expected. exp_count = exp_count / (2**len(addr_tokens)) if addr_tokens else exp_count - if exp_count < 10000 and all(t.is_indexed for t in name_partials.values()): + if exp_count < 10000 and addr_count < 20000\ + and all(t.is_indexed for t in name_partials.values()): penalty += 0.35 * max(1 if name_fulls else 0.1, 5 - len(name_partials) - len(addr_tokens)) yield penalty, exp_count,\ diff --git a/settings/import-extratags.lua b/settings/import-extratags.lua index 830345c6..d756cf3c 100644 --- a/settings/import-extratags.lua +++ b/settings/import-extratags.lua @@ -23,7 +23,16 @@ flex.set_main_tags{ secondary_link = 'named', tertiary_link = 'named'}, railway = 'named', - man_made = 'always', + man_made = {'none', + pier = 'always', + tower = 'always', + bridge = 'always', + works = 'named', + water_tower = 'always', + dyke = 'named', + lighthouse = 'always', + watermill = 'always', + tunnel = 'always'}, aerialway = 'always', boundary = {'named', postal_code = 'always'}, @@ -59,7 +68,6 @@ flex.set_prefilters{delete_keys = {'note', 'note:*', 'source', '*source', 'attri 'noexit', 'crossing', 'give_way', 'stop'}, railway = {'level_crossing', 'no', 'rail', 'switch', 'abandoned', 'signal', 'buffer_stop', 'razed'}, - man_made = {'survey_point', 'cutline'}, aerialway = {'pylon', 'no'}, aeroway = {'no'}, amenity = {'no', 'parking_space', 'parking_entrance'}, diff --git a/settings/import-full.lua b/settings/import-full.lua index 5b1ab060..f8b1e7a7 100644 --- a/settings/import-full.lua +++ b/settings/import-full.lua @@ -23,7 +23,16 @@ flex.set_main_tags{ secondary_link = 'named', tertiary_link = 'named'}, railway = 'named', - man_made = 'always', + man_made = {'none', + pier = 'always', + tower = 'always', + bridge = 'always', + works = 'named', + water_tower = 'always', + dyke = 'named', + lighthouse = 'always', + watermill = 'always', + tunnel = 'always'}, aerialway = 'always', boundary = {'named', postal_code = 'always'}, @@ -63,7 +72,6 @@ flex.set_prefilters{delete_keys = {'note', 'note:*', 'source', '*source', 'attri 'noexit', 'crossing', 'give_way', 'stop'}, railway = {'level_crossing', 'no', 'rail', 'switch', 'abandoned', 'signal', 'buffer_stop', 'razed'}, - man_made = {'survey_point', 'cutline'}, aerialway = {'pylon', 'no'}, aeroway = {'no'}, amenity = {'no', 'parking_space', 'parking_entrance'},