drop search_rank column from search_name

This is no longer needed for the initial lookup.
This commit is contained in:
Sarah Hoffmann
2026-03-02 11:32:06 +01:00
parent 46dfb12844
commit 7bbfb4b972
5 changed files with 24 additions and 18 deletions

View File

@@ -1138,10 +1138,10 @@ BEGIN
NEW.token_info, NEW.centroid);
IF array_length(name_vector, 1) is not NULL THEN
INSERT INTO search_name (place_id, search_rank, address_rank,
INSERT INTO search_name (place_id, address_rank,
importance, country_code, name_vector,
nameaddress_vector, centroid)
VALUES (NEW.place_id, NEW.rank_search, NEW.rank_address,
VALUES (NEW.place_id, NEW.rank_address,
NEW.importance, NEW.country_code, name_vector,
nameaddress_vector, NEW.centroid);
{% if debug %}RAISE WARNING 'Place added to search table';{% endif %}
@@ -1311,10 +1311,10 @@ BEGIN
{% if debug %}RAISE WARNING 'added to search name (full)';{% endif %}
{% if not db.reverse_only %}
INSERT INTO search_name (place_id, search_rank, address_rank,
INSERT INTO search_name (place_id, address_rank,
importance, country_code, name_vector,
nameaddress_vector, centroid)
VALUES (NEW.place_id, NEW.rank_search, NEW.rank_address,
VALUES (NEW.place_id, NEW.rank_address,
NEW.importance, NEW.country_code, name_vector,
nameaddress_vector, NEW.centroid);
{% endif %}

View File

@@ -12,7 +12,6 @@ DROP TABLE IF EXISTS search_name;
CREATE TABLE search_name (
place_id BIGINT NOT NULL,
importance FLOAT NOT NULL,
search_rank SMALLINT NOT NULL,
address_rank SMALLINT NOT NULL,
name_vector integer[] NOT NULL,
nameaddress_vector integer[] NOT NULL,

View File

@@ -155,7 +155,7 @@ class AddressSearch(base.AbstractSearch):
for ranking in self.rankings:
penalty += ranking.sql_penalty(t)
sql = sa.select(t.c.place_id, t.c.search_rank, t.c.address_rank,
sql = sa.select(t.c.place_id, t.c.address_rank,
t.c.country_code, t.c.centroid,
t.c.name_vector, t.c.nameaddress_vector,
t.c.importance, penalty.label('penalty'))
@@ -199,7 +199,7 @@ class AddressSearch(base.AbstractSearch):
inner = sql.limit(10000).order_by(sa.desc(sa.text('importance'))).subquery()
sql = sa.select(inner.c.place_id, inner.c.search_rank, inner.c.address_rank,
sql = sa.select(inner.c.place_id, inner.c.address_rank,
inner.c.country_code, inner.c.centroid, inner.c.importance,
inner.c.penalty)

View File

@@ -58,7 +58,7 @@ class PlaceSearch(base.AbstractSearch):
for ranking in self.rankings:
penalty += ranking.sql_penalty(t)
sql = sa.select(t.c.place_id, t.c.search_rank, t.c.address_rank,
sql = sa.select(t.c.place_id, t.c.address_rank,
t.c.country_code, t.c.centroid,
t.c.name_vector, t.c.nameaddress_vector,
t.c.importance)
@@ -101,12 +101,13 @@ class PlaceSearch(base.AbstractSearch):
if details.excluded:
sql = sql.where(base.exclude_places(t))
if details.min_rank > 0:
sql = sql.where(sa.or_(t.c.address_rank >= MIN_RANK_PARAM,
t.c.search_rank >= MIN_RANK_PARAM))
if details.max_rank < 30:
sql = sql.where(sa.or_(t.c.address_rank <= MAX_RANK_PARAM,
t.c.search_rank <= MAX_RANK_PARAM))
# Do not restrict ranks too much yet because rank restriction
# currently also depends on search_rank to account for state-cities
# like Berlin.
if details.max_rank < 26:
sql = sql.where(t.c.address_rank < 26)
elif details.max_rank < 30:
sql = sql.where(t.c.address_rank < MAX_RANK_PARAM)
sql = sql.add_columns(penalty.label('penalty'))
@@ -114,7 +115,7 @@ class PlaceSearch(base.AbstractSearch):
.order_by(sa.desc(sa.text('importance')))\
.subquery()
sql = sa.select(inner.c.place_id, inner.c.search_rank, inner.c.address_rank,
sql = sa.select(inner.c.place_id, inner.c.address_rank,
inner.c.country_code, inner.c.centroid, inner.c.importance,
inner.c.penalty)
@@ -130,7 +131,7 @@ class PlaceSearch(base.AbstractSearch):
inner = sql.subquery()
sql = sa.select(inner.c.place_id, inner.c.search_rank, inner.c.address_rank,
sql = sa.select(inner.c.place_id, inner.c.address_rank,
inner.c.country_code, inner.c.centroid, inner.c.importance,
inner.c.penalty)\
.where(inner.c.penalty - inner.c.importance < inner.c.min_penalty + 0.5)
@@ -174,6 +175,13 @@ class PlaceSearch(base.AbstractSearch):
sql = sql.order_by(penalty - tsearch.c.importance)
sql = sql.add_columns(tsearch.c.importance)
if details.min_rank > 0:
sql = sql.where(sa.or_(t.c.rank_address >= MIN_RANK_PARAM,
t.c.rank_search >= MIN_RANK_PARAM))
if details.max_rank < 30:
sql = sql.where(sa.or_(t.c.rank_address <= MAX_RANK_PARAM,
t.c.rank_search <= MAX_RANK_PARAM))
sql = sql.add_columns(penalty.label('accuracy'))\
.order_by(sa.text('accuracy'))

View File

@@ -2,7 +2,7 @@
#
# This file is part of Nominatim. (https://nominatim.org)
#
# Copyright (C) 2025 by the Nominatim developer community.
# Copyright (C) 2026 by the Nominatim developer community.
# For a full list of authors see the git log.
"""
SQLAlchemy definitions for all tables used by the frontend.
@@ -112,7 +112,6 @@ class SearchTables:
'search_name', meta,
sa.Column('place_id', sa.BigInteger),
sa.Column('importance', sa.Float),
sa.Column('search_rank', sa.SmallInteger),
sa.Column('address_rank', sa.SmallInteger),
sa.Column('name_vector', IntArray),
sa.Column('nameaddress_vector', IntArray),