13

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

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

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

4

3 回答 3

6

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

这本质上就是地理模型对纬度/经度所做的事情。

于 2010-06-11T08:45:19.797 回答
3

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

于 2010-06-11T15:05:06.273 回答
1

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

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

于 2011-02-22T23:27:00.700 回答