X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/05e47fbb28eb0f3f7803b6bfe194896b6e6c1ed0..c41f2fed2133668dc3179813261d39d3ff69cbdd:/nominatim/api/search/db_search_fields.py diff --git a/nominatim/api/search/db_search_fields.py b/nominatim/api/search/db_search_fields.py index 52693e95..324a7acc 100644 --- a/nominatim/api/search/db_search_fields.py +++ b/nominatim/api/search/db_search_fields.py @@ -14,6 +14,7 @@ import sqlalchemy as sa from nominatim.typing import SaFromClause, SaColumn, SaExpression from nominatim.api.search.query import Token +from nominatim.utils.json_writer import JsonWriter @dataclasses.dataclass class WeightedStrings: @@ -128,11 +129,17 @@ class FieldRanking: """ assert self.rankings - return sa.func.weigh_search(table.c[self.column], - [f"{{{','.join((str(s) for s in r.tokens))}}}" - for r in self.rankings], - [r.penalty for r in self.rankings], - self.default) + rout = JsonWriter().start_array() + for rank in self.rankings: + rout.start_array().value(rank.penalty).next() + rout.start_array() + for token in rank.tokens: + rout.value(token).next() + rout.end_array() + rout.end_array().next() + rout.end_array() + + return sa.func.weigh_search(table.c[self.column], rout(), self.default) @dataclasses.dataclass