Вопрос заказа JDO Query - PullRequest
       2

Вопрос заказа JDO Query

0 голосов
/ 25 мая 2011

У меня есть запрос JDO, который фильтрует по двум свойствам сущности Person, позволяет называть их "age" и "height".Я хочу заказать результаты по персоне "оценка".Тем не менее, из-за ограничений, которые накладывает App Engine, я должен сначала сделать заказ по возрасту или росту.Таким образом, в настоящее время у меня есть

query.setOrdering("age desc, score asc");

Меня действительно не интересуют результаты, упорядоченные по возрасту, я просто должен включить это, чтобы запрос работал (поскольку я отфильтровал по возрасту), мне действительно просто нужнорезультаты, упорядоченные по счету.

Есть ли способ упорядочить результаты по результату и эффективно игнорировать возраст?

Спасибо

1 Ответ

0 голосов
/ 25 мая 2011

Вы не можете сначала упорядочить по количеству баллов, поскольку ни один индекс не может поддержать этот запрос.

Решение / обходной путь, который я видел рекомендованным, состоит в том, чтобы выбрать несколько заранее определенных возрастных диапазонов, предварительно вычислить членство каждого Person в этих диапазонах, а затем использовать фильтр равенства для этого членства, чтобы вы могли score.

Например, если вы выбрали «<13», «13-18» и «18+» в качестве возрастного диапазона, вы добавите три логических свойства к каждому <code>Person. Затем вы можете выполнить запрос типа «выбрать * из персоны, где isUnder13 = истинный порядок по счету». Я думаю, в этом случае, поскольку членство является взаимоисключающим, вы можете использовать одно свойство enum и искать что-то вроде ageRange = 'UNDER_13', что сократит количество построенных индексов.

Конечно, это означает, что у вас не может быть произвольной функции поиска ... но наличие меньшего количества вариантов не всегда плохо для пользовательского опыта.

...