mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-08 02:54:08 +00:00
speed up reverse lookup of place nodes
Add a special index that contains the place nodes buffered by their respective area according to their search rank. This replaces the maximum area search for place nodes and reduces drastically the number of place nodes that need to be retrieved.
This commit is contained in:
@@ -48,7 +48,8 @@ def migrate(config: Configuration, paths: Any) -> int:
|
||||
|
||||
has_run_migration = False
|
||||
for version, func in _MIGRATION_FUNCTIONS:
|
||||
if db_version <= version:
|
||||
if db_version < version or \
|
||||
(db_version == (3, 5, 0, 99) and version == (3, 5, 0, 99)):
|
||||
title = func.__doc__ or ''
|
||||
LOG.warning("Running: %s (%s)", title.split('\n', 1)[0], version)
|
||||
kwargs = dict(conn=conn, config=config, paths=paths)
|
||||
@@ -371,3 +372,16 @@ def enable_forward_dependencies(conn: Connection, **_: Any) -> None:
|
||||
ON planet_osm_rels USING gin (parts)
|
||||
WITH (fastupdate=off)""")
|
||||
cur.execute("ANALYZE planet_osm_ways")
|
||||
|
||||
|
||||
@_migration(4, 2, 99, 1)
|
||||
def add_improved_geometry_reverse_placenode_index(conn: Connection, **_: Any) -> None:
|
||||
""" Create improved index for reverse lookup of place nodes.
|
||||
"""
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("""CREATE INDEX IF NOT EXISTS idx_placex_geometry_reverse_lookupPlaceNode
|
||||
ON placex
|
||||
USING gist (ST_Buffer(geometry, reverse_place_diameter(rank_search)))
|
||||
WHERE rank_address between 4 and 25 AND type != 'postcode'
|
||||
AND name is not null AND linked_place_id is null AND osm_type = 'N'
|
||||
""")
|
||||
|
||||
@@ -34,7 +34,7 @@ class NominatimVersion(NamedTuple):
|
||||
return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}"
|
||||
|
||||
|
||||
NOMINATIM_VERSION = NominatimVersion(4, 2, 99, 0)
|
||||
NOMINATIM_VERSION = NominatimVersion(4, 2, 99, 1)
|
||||
|
||||
POSTGRESQL_REQUIRED_VERSION = (9, 6)
|
||||
POSTGIS_REQUIRED_VERSION = (2, 2)
|
||||
|
||||
Reference in New Issue
Block a user