mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 18:37:58 +00:00
Remove special search for address part for long ways
Ways now always have the complete set of crossing boundaries independent of the length. Fixes #1108.
This commit is contained in:
@@ -1875,33 +1875,6 @@ BEGIN
|
||||
END LOOP;
|
||||
--DEBUG: RAISE WARNING 'address computed';
|
||||
|
||||
-- for long ways we should add search terms for the entire length
|
||||
IF st_length(NEW.geometry) > 0.05 THEN
|
||||
|
||||
location_rank_search := 0;
|
||||
location_distance := 0;
|
||||
|
||||
FOR location IN SELECT * from getNearFeatures(NEW.partition, NEW.geometry, search_maxrank, isin_tokens) LOOP
|
||||
|
||||
IF location.rank_address != location_rank_search THEN
|
||||
location_rank_search := location.rank_address;
|
||||
location_distance := location.distance * 1.5;
|
||||
END IF;
|
||||
|
||||
IF location.rank_search > 4 AND location.distance < location_distance THEN
|
||||
|
||||
-- Add it to the list of search terms
|
||||
nameaddress_vector := array_merge(nameaddress_vector, location.keywords::integer[]);
|
||||
INSERT INTO place_addressline (place_id, address_place_id, fromarea, isaddress, distance, cached_rank_address)
|
||||
VALUES (NEW.place_id, location.place_id, true, false, location.distance, location.rank_address);
|
||||
|
||||
END IF;
|
||||
|
||||
END LOOP;
|
||||
|
||||
END IF;
|
||||
--DEBUG: RAISE WARNING 'search terms for long ways added';
|
||||
|
||||
IF NEW.address is not null AND NEW.address ? 'postcode'
|
||||
AND NEW.address->'postcode' not similar to '%(,|;)%' THEN
|
||||
NEW.postcode := upper(trim(NEW.address->'postcode'));
|
||||
|
||||
@@ -132,6 +132,18 @@ def compare_place_id(expected, result, column, context):
|
||||
LazyFmt("Bad place id in column %s. Expected: %s, got: %s.",
|
||||
column, expected, PlaceObjName(result, context.db)))
|
||||
|
||||
def check_database_integrity(context):
|
||||
""" Check some generic constraints on the tables.
|
||||
"""
|
||||
# place_addressline should not have duplicate (place_id, address_place_id)
|
||||
cur = context.db.cursor()
|
||||
cur.execute("""SELECT count(*) FROM
|
||||
(SELECT place_id, address_place_id, count(*) as c
|
||||
FROM place_addressline GROUP BY place_id, address_place_id) x
|
||||
WHERE c > 1""")
|
||||
eq_(0, cur.fetchone()[0], "Duplicates found in place_addressline")
|
||||
|
||||
|
||||
class NominatimID:
|
||||
""" Splits a unique identifier for places into its components.
|
||||
As place_ids cannot be used for testing, we use a unique
|
||||
@@ -290,6 +302,7 @@ def import_and_index_data_from_place_table(context):
|
||||
and ST_GeometryType(geometry) = 'ST_LineString'""")
|
||||
context.db.commit()
|
||||
context.nominatim.run_setup_script('calculate-postcodes', 'index', 'index-noanalyse')
|
||||
check_database_integrity(context)
|
||||
|
||||
@when("updating places")
|
||||
def update_place_table(context):
|
||||
@@ -314,6 +327,8 @@ def update_place_table(context):
|
||||
if cur.rowcount == 0:
|
||||
break
|
||||
|
||||
check_database_integrity(context)
|
||||
|
||||
@when("marking for delete (?P<oids>.*)")
|
||||
def delete_places(context, oids):
|
||||
context.nominatim.run_setup_script(
|
||||
|
||||
Reference in New Issue
Block a user