как эффективно запустить два фильтра неравенства для запросов в движке приложения - PullRequest
13 голосов
/ 11 июня 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 11 июня 2010

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

По сути, это то, что геомодель делает для широты / долготы.

3 голосов
/ 11 июня 2010

Согласно недавнему выступлению Альфреда Фуллера , они работают над поддержкой нескольких фильтров неравенства для числовых свойств.

1 голос
/ 23 февраля 2011

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

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

...