Как эффективно запускать два фильтра неравенства по запросам в приложении
Я знаю, что в приложении есть ограничение "Фильтры неравномерности разрешены только на одном свойстве", как описано здесь: 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 и т.д.