mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-10-27 11:42:46 +03:00
fix query over classtype tables
The case statement prevented the index on the classtype tables from being used. Move the case statement inside the geometry function instead.
This commit is contained in:
parent
d97ca9fcb2
commit
8fc3dd9457
@ -287,10 +287,11 @@ class NearSearch(AbstractSearch):
|
||||
# radius for the lookup.
|
||||
sql = sql.join(table, t.c.place_id == table.c.place_id)\
|
||||
.join(tgeom,
|
||||
sa.case((sa.and_(tgeom.c.rank_address < 9,
|
||||
tgeom.c.geometry.is_area()),
|
||||
tgeom.c.geometry.ST_Contains(table.c.centroid)),
|
||||
else_ = tgeom.c.centroid.ST_DWithin(table.c.centroid, 0.05)))\
|
||||
table.c.centroid.ST_CoveredBy(
|
||||
sa.case((sa.and_(tgeom.c.rank_address < 9,
|
||||
tgeom.c.geometry.is_area()),
|
||||
tgeom.c.geometry),
|
||||
else_ = tgeom.c.centroid.ST_Expand(0.05))))\
|
||||
.order_by(tgeom.c.centroid.ST_Distance(table.c.centroid))
|
||||
|
||||
sql = sql.where(t.c.rank_address.between(MIN_RANK_PARAM, MAX_RANK_PARAM))
|
||||
|
@ -74,7 +74,11 @@ class Geometry(types.UserDefinedType): # type: ignore[type-arg]
|
||||
|
||||
|
||||
def ST_Contains(self, other: SaColumn) -> SaColumn:
|
||||
return sa.func.ST_Contains(self, other, type_=sa.Float)
|
||||
return sa.func.ST_Contains(self, other, type_=sa.Boolean)
|
||||
|
||||
|
||||
def ST_CoveredBy(self, other: SaColumn) -> SaColumn:
|
||||
return sa.func.ST_CoveredBy(self, other, type_=sa.Boolean)
|
||||
|
||||
|
||||
def ST_ClosestPoint(self, other: SaColumn) -> SaColumn:
|
||||
|
Loading…
Reference in New Issue
Block a user