mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-06 18:14:16 +00:00
@@ -1234,6 +1234,7 @@ DECLARE
|
|||||||
relation_members TEXT[];
|
relation_members TEXT[];
|
||||||
relMember RECORD;
|
relMember RECORD;
|
||||||
linkedplacex RECORD;
|
linkedplacex RECORD;
|
||||||
|
addr_item RECORD;
|
||||||
search_diameter FLOAT;
|
search_diameter FLOAT;
|
||||||
search_prevdiameter FLOAT;
|
search_prevdiameter FLOAT;
|
||||||
search_maxrank INTEGER;
|
search_maxrank INTEGER;
|
||||||
@@ -1766,28 +1767,43 @@ BEGIN
|
|||||||
parent_place_id_rank = 0;
|
parent_place_id_rank = 0;
|
||||||
|
|
||||||
|
|
||||||
-- convert isin to array of tokenids
|
-- convert address store to array of tokenids
|
||||||
--DEBUG: RAISE WARNING 'Starting address search';
|
--DEBUG: RAISE WARNING 'Starting address search';
|
||||||
isin_tokens := '{}'::int[];
|
isin_tokens := '{}'::int[];
|
||||||
IF NEW.address IS NOT NULL THEN
|
IF NEW.address IS NOT NULL THEN
|
||||||
isin := avals(NEW.address);
|
FOR addr_item IN SELECT * FROM each(NEW.address)
|
||||||
IF array_upper(isin, 1) IS NOT NULL THEN
|
LOOP
|
||||||
FOR i IN 1..array_upper(isin, 1) LOOP
|
IF addr_item.key IN ('city', 'tiger:county', 'state', 'suburb', 'province', 'district', 'region', 'county', 'municipality', 'hamlet', 'village', 'subdistrict', 'town', 'neighbourhood', 'quarter', 'parish') THEN
|
||||||
-- TODO further split terms with comma and semicolon
|
address_street_word_id := get_name_id(make_standard_name(addr_item.value));
|
||||||
address_street_word_id := get_name_id(make_standard_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_id IS NOT NULL AND NOT(ARRAY[address_street_word_id] <@ isin_tokens) THEN
|
||||||
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
|
||||||
isin_tokens := isin_tokens || address_street_word_id;
|
isin_tokens := isin_tokens || address_street_word_id;
|
||||||
END IF;
|
END IF;
|
||||||
|
address_street_word_id := get_word_id(make_standard_name(addr_item.value));
|
||||||
-- merge word into address vector
|
|
||||||
address_street_word_id := get_word_id(make_standard_name(isin[i]));
|
|
||||||
IF address_street_word_id IS NOT NULL THEN
|
IF address_street_word_id IS NOT NULL THEN
|
||||||
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END IF;
|
||||||
END IF;
|
IF addr_item.key = 'is_in' THEN
|
||||||
|
-- is_in items need splitting
|
||||||
|
isin := regexp_split_to_array(NEW.isin, E'[;,]');
|
||||||
|
IF array_upper(isin, 1) IS NOT NULL THEN
|
||||||
|
FOR i IN 1..array_upper(isin, 1) LOOP
|
||||||
|
address_street_word_id := get_name_id(make_standard_name(isin[i]));
|
||||||
|
IF address_street_word_id IS NOT NULL AND NOT(ARRAY[address_street_word_id] <@ isin_tokens) THEN
|
||||||
|
isin_tokens := isin_tokens || address_street_word_id;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- merge word into address vector
|
||||||
|
address_street_word_id := get_word_id(make_standard_name(isin[i]));
|
||||||
|
IF address_street_word_id IS NOT NULL THEN
|
||||||
|
nameaddress_vector := array_merge(nameaddress_vector, ARRAY[address_street_word_id]);
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
END IF;
|
END IF;
|
||||||
|
nameaddress_vector := array_merge(nameaddress_vector, isin_tokens);
|
||||||
|
|
||||||
-- %NOTIGERDATA% IF 0 THEN
|
-- %NOTIGERDATA% IF 0 THEN
|
||||||
-- for the USA we have an additional address table. Merge in zip codes from there too
|
-- for the USA we have an additional address table. Merge in zip codes from there too
|
||||||
|
|||||||
Reference in New Issue
Block a user