X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/b9517c99ae6297c2ab908d7fa324efd2d1b2f43a..d8ed565bce27c638074fbc6f1961dfc0d160e312:/lib-sql/functions/ranking.sql diff --git a/lib-sql/functions/ranking.sql b/lib-sql/functions/ranking.sql index 1f236211..0b18954c 100644 --- a/lib-sql/functions/ranking.sql +++ b/lib-sql/functions/ranking.sql @@ -1,3 +1,10 @@ +-- SPDX-License-Identifier: GPL-2.0-only +-- +-- This file is part of Nominatim. (https://nominatim.org) +-- +-- Copyright (C) 2022 by the Nominatim developer community. +-- For a full list of authors see the git log. + -- Functions related to search and address ranks -- Return an approximate search radius according to the search rank. @@ -277,3 +284,26 @@ BEGIN END; $$ 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;