Валідатор назв вулиць

Дуже багато різних способів адресації, що сильно ускладнює запити до БД. Зараз валідатор обробляє лише будинки, що входять у відношення street, чи associatedStreet і для яких вказаний тег name. Валідатор працює з даними імпортованими за допомогою osm2pgsql з ключами -k -s -G. Для будинків використовується наступний запит:

SELECT
osm_id,
ASTEXT(ST_MakePolygon(ST_ExteriorRing(way))) AS the_geom,
X(CENTROID(way)) AS x,
Y(CENTROID(way)) AS y,
“addr:housenumber” AS num

FROM planet_osm_rels rel, planet_osm_polygon
WHERE
ST_Within(way, ST_PolygonFromText(‘Геометрія межі міста’)) AND
GEOMETRYTYPE(way) = ‘POLYGON’ AND
hstore(rel.tags)->‘name’ = ‘Назва вулиці’ AND
(hstore(rel.tags)->‘type’ = ‘associatedStreet’ OR hstore(rel.tags)->‘type’ = ‘street’) AND
osm_id=ANY(ARRAY(
SELECT
CAST(replace(replace(members[k2-1], ‘w’, ‘’),‘r’,‘-’) AS int)
FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts, members
FROM planet_osm_rels
WHERE id = rel.id
) sub
WHERE members[k
2] = ‘house’ AND
(substring(members[k2-1], 1, 1) = ‘w’ OR substring(members[k2-1], 1, 1) = ‘r’)
))
ORDER BY
CAST(substring(“addr:housenumber” FROM ‘^\d+’) AS int),
LENGTH(“addr:housenumber”),
“addr:housenumber”

Будуть пропозиції щодо вдосконалення такої вибірки, аби враховувались усі наведені вище варіанти адресації?