forked from hans/Nominatim
replace CASE construct with plpgsql function
This commit is contained in:
@@ -284,3 +284,26 @@ BEGIN
|
|||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE plpgsql IMMUTABLE;
|
LANGUAGE plpgsql IMMUTABLE;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION weigh_search(search_vector INT[],
|
||||||
|
term_vectors TEXT[],
|
||||||
|
weight_vectors FLOAT[],
|
||||||
|
def_weight FLOAT)
|
||||||
|
RETURNS FLOAT
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
pos INT := 1;
|
||||||
|
terms TEXT;
|
||||||
|
BEGIN
|
||||||
|
FOREACH terms IN ARRAY term_vectors
|
||||||
|
LOOP
|
||||||
|
IF search_vector @> terms::INTEGER[] THEN
|
||||||
|
RETURN weight_vectors[pos];
|
||||||
|
END IF;
|
||||||
|
pos := pos + 1;
|
||||||
|
END LOOP;
|
||||||
|
RETURN def_weight;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
LANGUAGE plpgsql IMMUTABLE;
|
||||||
|
|||||||
@@ -129,10 +129,11 @@ class FieldRanking:
|
|||||||
"""
|
"""
|
||||||
assert self.rankings
|
assert self.rankings
|
||||||
|
|
||||||
col = table.c[self.column]
|
return sa.func.weigh_search(table.c[self.column],
|
||||||
|
[f"{{{','.join((str(s) for s in r.tokens))}}}"
|
||||||
return sa.case(*((col.contains(r.tokens),r.penalty) for r in self.rankings),
|
for r in self.rankings],
|
||||||
else_=self.default)
|
[r.penalty for r in self.rankings],
|
||||||
|
self.default)
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class NominatimVersion(NamedTuple):
|
|||||||
return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}"
|
return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}"
|
||||||
|
|
||||||
|
|
||||||
NOMINATIM_VERSION = NominatimVersion(4, 2, 99, 1)
|
NOMINATIM_VERSION = NominatimVersion(4, 2, 99, 2)
|
||||||
|
|
||||||
POSTGRESQL_REQUIRED_VERSION = (9, 6)
|
POSTGRESQL_REQUIRED_VERSION = (9, 6)
|
||||||
POSTGIS_REQUIRED_VERSION = (2, 2)
|
POSTGIS_REQUIRED_VERSION = (2, 2)
|
||||||
|
|||||||
Reference in New Issue
Block a user