X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/fd85483ce3b68fa65c7fae82ef65b035fb4c94fb..4dadbaea73a77d0ad33e5f98d8f8fb828286ecb3:/nominatim/api/search/db_search_fields.py?ds=sidebyside diff --git a/nominatim/api/search/db_search_fields.py b/nominatim/api/search/db_search_fields.py index 612e9059..59af8260 100644 --- a/nominatim/api/search/db_search_fields.py +++ b/nominatim/api/search/db_search_fields.py @@ -7,7 +7,7 @@ """ Data structures for more complex fields in abstract search descriptions. """ -from typing import List, Tuple, Iterator, cast +from typing import List, Tuple, Iterator, cast, Dict import dataclasses import sqlalchemy as sa @@ -195,10 +195,17 @@ class SearchData: """ Set the qulaifier field from the given tokens. """ if tokens: - min_penalty = min(t.penalty for t in tokens) + categories: Dict[Tuple[str, str], float] = {} + min_penalty = 1000.0 + for t in tokens: + if t.penalty < min_penalty: + min_penalty = t.penalty + cat = t.get_category() + if t.penalty < categories.get(cat, 1000.0): + categories[cat] = t.penalty self.penalty += min_penalty - self.qualifiers = WeightedCategories([t.get_category() for t in tokens], - [t.penalty - min_penalty for t in tokens]) + self.qualifiers = WeightedCategories(list(categories.keys()), + list(categories.values())) def set_ranking(self, rankings: List[FieldRanking]) -> None: