问题描述
|
我有一个JDO查询,它对\“ Person \”实体的两个属性进行过滤,将它们称为\“ age \”和\“ height \”。我希望按人员的“得分”来排序结果。但是,由于App Engine施加的限制,我首先必须按年龄或身高排序。所以我目前有
query.setordering(\"age desc,score asc\");
我真的不对按年龄排序的结果感兴趣,我只需要包括该查询以使查询正常工作(因为我已经按年龄进行了过滤),我真的只需要按分数对结果进行排序。
有没有办法让结果按分数排序并有效地忽略年龄排序?
谢谢
解决方法
您无法先按得分排序,因为没有索引可以支持该查询。
我看到的建议解决方案/解决方法是选择一些预定义的年龄范围,将每个ѭ1的成员资格预先计算为这些范围,然后对该成员资格使用相等过滤器,以便按ѭ2进行排序。
例如,如果您选择\“ <13 \”,\“ 13-18 \”和\“ 18+ \”作为年龄范围,则需要为每个
Person
添加三个布尔属性。然后,您可以执行以下查询:“从Person中选择*,其中isUnder13 =得分的真实顺序”。我猜在这种情况下,由于成员资格是互斥的,因此您可以使用单个枚举属性并搜索类似于“ 4”的内容,这将减少所建立索引的数量。
当然,这意味着您不能具有任意搜索功能...但是选择较少并不总是不利于用户体验。