mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-07 10:34:08 +00:00
clean up get_word_id function
Replaced by addr_ids_from_name() which also normalises the string.
This commit is contained in:
@@ -201,16 +201,16 @@ END;
|
|||||||
$$
|
$$
|
||||||
LANGUAGE plpgsql;
|
LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
-- Normalize a string and lookup its word ids (partial words).
|
||||||
CREATE OR REPLACE FUNCTION get_word_id(lookup_word TEXT)
|
CREATE OR REPLACE FUNCTION addr_ids_from_name(lookup_word TEXT)
|
||||||
RETURNS INTEGER
|
RETURNS INTEGER[]
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
lookup_token TEXT;
|
lookup_token TEXT;
|
||||||
return_word_id INTEGER;
|
return_word_id INTEGER[];
|
||||||
BEGIN
|
BEGIN
|
||||||
lookup_token := trim(lookup_word);
|
lookup_token := make_standard_name(lookup_word);
|
||||||
SELECT min(word_id) FROM word
|
SELECT array_agg(word_id) FROM word
|
||||||
WHERE word_token = lookup_token and class is null and type is null
|
WHERE word_token = lookup_token and class is null and type is null
|
||||||
INTO return_word_id;
|
INTO return_word_id;
|
||||||
RETURN return_word_id;
|
RETURN return_word_id;
|
||||||
@@ -219,24 +219,7 @@ $$
|
|||||||
LANGUAGE plpgsql STABLE;
|
LANGUAGE plpgsql STABLE;
|
||||||
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION get_name_id(lookup_word TEXT)
|
-- Normalize a string and look up its name ids (full words).
|
||||||
RETURNS INTEGER
|
|
||||||
AS $$
|
|
||||||
DECLARE
|
|
||||||
lookup_token TEXT;
|
|
||||||
return_word_id INTEGER;
|
|
||||||
BEGIN
|
|
||||||
lookup_token := ' '||trim(lookup_word);
|
|
||||||
SELECT min(word_id) FROM word
|
|
||||||
WHERE word_token = lookup_token and class is null and type is null
|
|
||||||
INTO return_word_id;
|
|
||||||
RETURN return_word_id;
|
|
||||||
END;
|
|
||||||
$$
|
|
||||||
LANGUAGE plpgsql STABLE;
|
|
||||||
|
|
||||||
|
|
||||||
-- Normalize a string and look up its name ids.
|
|
||||||
CREATE OR REPLACE FUNCTION word_ids_from_name(lookup_word TEXT)
|
CREATE OR REPLACE FUNCTION word_ids_from_name(lookup_word TEXT)
|
||||||
RETURNS INTEGER[]
|
RETURNS INTEGER[]
|
||||||
AS $$
|
AS $$
|
||||||
|
|||||||
@@ -413,7 +413,6 @@ CREATE OR REPLACE FUNCTION placex_update()
|
|||||||
RETURNS TRIGGER
|
RETURNS TRIGGER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
|
|
||||||
near_centroid GEOMETRY;
|
near_centroid GEOMETRY;
|
||||||
|
|
||||||
search_maxdistance FLOAT[];
|
search_maxdistance FLOAT[];
|
||||||
@@ -421,17 +420,13 @@ DECLARE
|
|||||||
address_havelevel BOOLEAN[];
|
address_havelevel BOOLEAN[];
|
||||||
|
|
||||||
i INTEGER;
|
i INTEGER;
|
||||||
iMax FLOAT;
|
|
||||||
location RECORD;
|
location RECORD;
|
||||||
way RECORD;
|
|
||||||
relation RECORD;
|
|
||||||
relation_members TEXT[];
|
relation_members TEXT[];
|
||||||
addr_item RECORD;
|
addr_item RECORD;
|
||||||
search_diameter FLOAT;
|
search_diameter FLOAT;
|
||||||
search_prevdiameter FLOAT;
|
search_prevdiameter FLOAT;
|
||||||
search_maxrank INTEGER;
|
search_maxrank INTEGER;
|
||||||
address_maxrank INTEGER;
|
address_maxrank INTEGER;
|
||||||
address_street_word_id INTEGER;
|
|
||||||
address_street_word_ids INTEGER[];
|
address_street_word_ids INTEGER[];
|
||||||
parent_place_id_rank BIGINT;
|
parent_place_id_rank BIGINT;
|
||||||
|
|
||||||
@@ -732,15 +727,20 @@ BEGIN
|
|||||||
IF NEW.address IS NOT NULL THEN
|
IF NEW.address IS NOT NULL THEN
|
||||||
FOR addr_item IN SELECT * FROM each(NEW.address)
|
FOR addr_item IN SELECT * FROM each(NEW.address)
|
||||||
LOOP
|
LOOP
|
||||||
IF addr_item.key IN ('city', 'tiger:county', 'state', 'suburb', 'province', 'district', 'region', 'county', 'municipality', 'hamlet', 'village', 'subdistrict', 'town', 'neighbourhood', 'quarter', 'parish') THEN
|
IF addr_item.key IN ('city', 'tiger:county', 'state', 'suburb', 'province',
|
||||||
address_street_word_id := get_name_id(make_standard_name(addr_item.value));
|
'district', 'region', 'county', 'municipality',
|
||||||
IF address_street_word_id IS NOT NULL AND NOT(ARRAY[address_street_word_id] <@ isin_tokens) THEN
|
'hamlet', 'village', 'subdistrict', 'town',
|
||||||
isin_tokens := isin_tokens || address_street_word_id;
|
'neighbourhood', 'quarter', 'parish')
|
||||||
|
THEN
|
||||||
|
address_street_word_ids := word_ids_from_name(addr_item.value);
|
||||||
|
IF address_street_word_ids is not null THEN
|
||||||
|
isin_tokens := array_merge(isin_tokens, address_street_word_ids);
|
||||||
END IF;
|
END IF;
|
||||||
IF NOT %REVERSE-ONLY% THEN
|
IF NOT %REVERSE-ONLY% THEN
|
||||||
address_street_word_id := get_word_id(make_standard_name(addr_item.value));
|
address_street_word_ids := addr_ids_from_name(addr_item.value);
|
||||||
IF address_street_word_id IS NOT NULL THEN
|
IF address_street_word_ids is not null THEN
|
||||||
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
nameaddress_vector := array_merge(nameaddress_vector,
|
||||||
|
address_street_word_ids);
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -749,16 +749,17 @@ BEGIN
|
|||||||
isin := regexp_split_to_array(addr_item.value, E'[;,]');
|
isin := regexp_split_to_array(addr_item.value, E'[;,]');
|
||||||
IF array_upper(isin, 1) IS NOT NULL THEN
|
IF array_upper(isin, 1) IS NOT NULL THEN
|
||||||
FOR i IN 1..array_upper(isin, 1) LOOP
|
FOR i IN 1..array_upper(isin, 1) LOOP
|
||||||
address_street_word_id := get_name_id(make_standard_name(isin[i]));
|
address_street_word_ids := word_ids_from_name(isin[i]);
|
||||||
IF address_street_word_id IS NOT NULL AND NOT(ARRAY[address_street_word_id] <@ isin_tokens) THEN
|
IF address_street_word_ids is not null THEN
|
||||||
isin_tokens := isin_tokens || address_street_word_id;
|
isin_tokens := array_merge(isin_tokens, address_street_word_ids);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- merge word into address vector
|
-- merge word into address vector
|
||||||
IF NOT %REVERSE-ONLY% THEN
|
IF NOT %REVERSE-ONLY% THEN
|
||||||
address_street_word_id := get_word_id(make_standard_name(isin[i]));
|
address_street_word_ids := addr_ids_from_name(isin[i]);
|
||||||
IF address_street_word_id IS NOT NULL THEN
|
IF address_street_word_ids is not null THEN
|
||||||
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
nameaddress_vector := array_merge(nameaddress_vector,
|
||||||
|
address_street_word_ids);
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|||||||
Reference in New Issue
Block a user