mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 18:37:58 +00:00
simplify weigh_search() function
Use JSON arrays which can have mixed types and therefore have a more logical structure than separate arrays. Avoid JSON dicts because of their verboseness.
This commit is contained in:
@@ -287,21 +287,19 @@ LANGUAGE plpgsql IMMUTABLE;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION weigh_search(search_vector INT[],
|
||||
term_vectors TEXT[],
|
||||
weight_vectors FLOAT[],
|
||||
rankings TEXT,
|
||||
def_weight FLOAT)
|
||||
RETURNS FLOAT
|
||||
AS $$
|
||||
DECLARE
|
||||
pos INT := 1;
|
||||
terms TEXT;
|
||||
rank JSON;
|
||||
BEGIN
|
||||
FOREACH terms IN ARRAY term_vectors
|
||||
FOR rank IN
|
||||
SELECT * FROM json_array_elements(rankings::JSON)
|
||||
LOOP
|
||||
IF search_vector @> terms::INTEGER[] THEN
|
||||
RETURN weight_vectors[pos];
|
||||
IF true = ALL(SELECT x::int = ANY(search_vector) FROM json_array_elements_text(rank->1) as x) THEN
|
||||
RETURN (rank->>0)::float;
|
||||
END IF;
|
||||
pos := pos + 1;
|
||||
END LOOP;
|
||||
RETURN def_weight;
|
||||
END;
|
||||
|
||||
Reference in New Issue
Block a user