Как эффективно запускать два фильтра неравенства по запросам в приложении

Я знаю, что в приложении есть ограничение "Фильтры неравномерности разрешены только на одном свойстве", как описано здесь: http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Introducing_Indexes

Однако есть ли способ существенно запустить два фильтра, или это просто невозможно? Например, если у меня был вид сущности, который просто имел координату X и Y, и мне нужны все объекты, которые находятся в определенном диапазоне от X1 до X2 и от Y1 до Y2, есть ли способ запросить для всех объектов из X1 в X2 отсортированы по их значениям Y, а затем легко захватить соответствующие между моим желаемым диапазоном значений Y?

Если да, то у кого-нибудь есть пример кода для демонстрации?

Ответы

Ответ 1

Если он подходит вашим данным, вы можете дискретировать свои X и Y в бункеры, генерировать хэш двух значений и хранить их на модели. Затем вы можете делать точные поиски хешей (ов), которые перекрывают область, в которую вы хотите искать. Затем вручную отфильтруйте результаты, которые находятся за пределами вашего региона.

Это по существу то, что geomodel делает для широты/долготы.

Ответ 2

По словам Альфреда Фуллера, недавно Google I/O talk, они работают над поддержкой нескольких фильтров неравенства для числовых свойств.

Ответ 3

В зависимости от того, что вы пытаетесь сделать, вы можете найти это MultiInequalityMixin интересно. Он в значительной степени описывает то, что вы описываете, передавая первое неравенство через базу данных Google и делая последующие неравенства в качестве фильтров. Отказ от ответственности: это довольно схематичная реализация идеи, которую я имел более года назад, и на самом деле не все закончилось...

Если вам нужна эффективная индексация по двум осям, то, как говорит Саксонский Друс, для чего требуется какой-то алгоритм geohash и т.д.