我希望在airbnb(https://www.airbnb.com/s/Paris--France?source=ds&page=1&s_tag=PNoY_mlz&allow_override%5B%5D=)
上实现类似地图拖动搜索的功能我在数据存储中保存这样的数据
user.lat = float(lat)
user.lon = float(lon)
user.geoLocation = ndb.GeoPt(float(lat),float(lon))
每当我拖动&删除地图或放大或缩小我在控制器中获得以下参数
def get(self):
"""
This is an ajax function. It gets the place name, north_east, and south_west
coordinates. Then it fetch the results matching the search criteria and
create a result list. After that it returns the result in json format.
:return: result
"""
self.response.headers['Content-type'] = 'application/json'
results = []
north_east_latitude = float(self.request.get('nelat'))
north_east_longitude = float(self.request.get('nelon'))
south_west_latitude = float(self.request.get('swlat'))
south_west_longitude = float(self.request.get('swlon'))
points = Points.query(Points.lat<north_east_latitude,Points.lat>south_west_latitude)
for row in points:
if row.lon > north_east_longitude and row.lon < south_west_longitude:
listingdic = {'name': row.name, 'desc': row.description, 'contact': row.contact, 'lat': row.lat, 'lon': row.lon}
results.append(listingdic)
self.write(json.dumps({'listings':results}))
我的模型类在下面给出
class Points(ndb.Model):
name = ndb.StringProperty(required=True)
description = ndb.StringProperty(required=True)
contact = ndb.StringProperty(required=True)
lat = ndb.FloatProperty(required=True)
lon = ndb.FloatProperty(required=True)
geoLocation = ndb.GeoPtProperty()
我想改进查询。
提前致谢。
答案 0 :(得分:2)
不,您无法通过检查查询中的所有4个条件来改进解决方案,因为ndb查询不支持多个属性上的不等式过滤器。来自NDB Queries(强调我的):
限制:数据存储区对查询实施一些限制。 违反这些将导致它引发异常。例如, 结合太多过滤器,使用不等式进行多次过滤 属性,或将不等式与排序顺序相结合 目前不允许使用不同的财产。还有过滤器 引用多个属性有时需要二级索引 配置。
和
注意:如前所述,数据存储区使用对多个属性的不等式过滤拒绝查询。