]> git.openstreetmap.org Git - nominatim.git/commitdiff
use restrict for housenumber lookups with few numbers
authorSarah Hoffmann <lonvia@denofr.de>
Sat, 25 Nov 2023 17:39:28 +0000 (18:39 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 29 Nov 2023 10:28:54 +0000 (11:28 +0100)
nominatim/api/search/db_search_builder.py

index 6d94feaba84343eac42e44166931b54c5eaf4d80..39c25f6b3118f4c0bb6c00b14482b0d453d57621 100644 (file)
@@ -163,11 +163,15 @@ class SearchBuilder:
             housenumber is the main name token.
         """
         sdata.lookups = [dbf.FieldLookup('name_vector', [t.token for t in hnrs], 'lookup_any')]
+        expected_count = sum(t.count for t in hnrs)
 
         partials = [t for trange in address
                        for t in self.query.get_partials_list(trange)]
 
-        if len(partials) != 1 or partials[0].count < 10000:
+        if expected_count < 8000:
+            sdata.lookups.append(dbf.FieldLookup('nameaddress_vector',
+                                                 [t.token for t in partials], 'restrict'))
+        elif len(partials) != 1 or partials[0].count < 10000:
             sdata.lookups.append(dbf.FieldLookup('nameaddress_vector',
                                                  [t.token for t in partials], 'lookup_all'))
         else:
@@ -178,7 +182,7 @@ class SearchBuilder:
                                 'lookup_any'))
 
         sdata.housenumbers = dbf.WeightedStrings([], [])
-        yield dbs.PlaceSearch(0.05, sdata, sum(t.count for t in hnrs))
+        yield dbs.PlaceSearch(0.05, sdata, expected_count)
 
 
     def build_name_search(self, sdata: dbf.SearchData,