]> git.openstreetmap.org Git - nominatim.git/commitdiff
make housenumber search work with non-indexed partials
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 31 Jul 2024 12:09:35 +0000 (14:09 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 31 Jul 2024 12:09:35 +0000 (14:09 +0200)
src/nominatim_api/search/db_search_builder.py
src/nominatim_api/search/legacy_tokenizer.py

index e29f0b931eb4f1b4758e9601d0d502d7bf4b531e..6453509ebce93d5ba26433742cb8263c87eb7045 100644 (file)
@@ -167,7 +167,12 @@ class SearchBuilder:
         expected_count = sum(t.count for t in hnrs)
 
         partials = {t.token: t.addr_count for trange in address
         expected_count = sum(t.count for t in hnrs)
 
         partials = {t.token: t.addr_count for trange in address
-                       for t in self.query.get_partials_list(trange)}
+                       for t in self.query.get_partials_list(trange)
+                       if t.is_indexed}
+
+        if not partials:
+            # can happen when none of the partials is indexed
+            return
 
         if expected_count < 8000:
             sdata.lookups.append(dbf.FieldLookup('nameaddress_vector',
 
         if expected_count < 8000:
             sdata.lookups.append(dbf.FieldLookup('nameaddress_vector',
index ecb0bbfe50def7d1cb632a417df57df498d709a7..68cbd712b46855e0161fff32189130e299739810 100644 (file)
@@ -253,13 +253,14 @@ class LegacyQueryAnalyzer(AbstractQueryAnalyzer):
 
 
 def _dump_word_tokens(query: qmod.QueryStruct) -> Iterator[List[Any]]:
 
 
 def _dump_word_tokens(query: qmod.QueryStruct) -> Iterator[List[Any]]:
-    yield ['type', 'token', 'word_token', 'lookup_word', 'penalty', 'count', 'info']
+    yield ['type', 'token', 'word_token', 'lookup_word', 'penalty', 'count', 'info', 'indexed']
     for node in query.nodes:
         for tlist in node.starting:
             for token in tlist.tokens:
                 t = cast(LegacyToken, token)
                 yield [tlist.ttype.name, t.token, t.word_token or '',
     for node in query.nodes:
         for tlist in node.starting:
             for token in tlist.tokens:
                 t = cast(LegacyToken, token)
                 yield [tlist.ttype.name, t.token, t.word_token or '',
-                       t.lookup_word or '', t.penalty, t.count, t.info]
+                       t.lookup_word or '', t.penalty, t.count, t.info,
+                       'Y' if t.is_indexed else 'N']
 
 
 async def create_query_analyzer(conn: SearchConnection) -> AbstractQueryAnalyzer:
 
 
 async def create_query_analyzer(conn: SearchConnection) -> AbstractQueryAnalyzer: