如何在app引擎中有效地运行两个不等式过滤器

时间:2010-06-11 07:41:54

标签: google-app-engine filter inequality

我知道应用引擎的限制是“只允许在一个属性上使用不等号过滤器”,如下所述:http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Introducing_Indexes

然而,有什么方法可以基本上运行两个过滤器,或者这根本不可能?例如,如果我有一个只有X和Y坐标的实体类型,并且我希望所有实体都在X1到X2和Y1到Y2的某个范围内,那么有什么方法可以查询从X1到X1的所有实体X2按Y值排序,然后轻松地在我想要的Y值范围之间抓取相关值?

如果是这样,有人会有一些示例代码来演示吗?

3 个答案:

答案 0 :(得分:6)

如果它适合您的数据,您可以将X和Y离散化为二进制数,生成两个值的哈希值,并将其存储在模型上。然后,您可以对要在其中搜索的区域重叠的哈希值进行精确查找。然后,手动过滤掉您所在地区以外的结果。

这基本上是geomodel为纬度/经度做的事情。

答案 1 :(得分:3)

根据Alfred Fuller最近的Google I/O talk,他们正致力于支持数字属性上的多个不等式过滤器。

答案 2 :(得分:1)

根据您要执行的操作,您可能会发现MultiInequalityMixin 有趣。 它完全按照你的描述进行操作,将第一个不等式传递给谷歌的数据库,并将后续的不等式作为过滤器。免责声明:这是一个相当粗略的实现我一年前的想法,并没有真正完成所有... ...

如果你需要在两个轴上进行有效的索引,那么正如Saxon Druce所说,某种geohash等算法就是所谓的。

相关问题