如何在Google App Engine Objectify中获取特定实体附近的实体?

时间:2013-12-29 10:57:55

标签: google-app-engine objectify

所以假设我有100.000个 Foo 类型的实体。 Foo有一个索引的属性 bar 。现在,对于特定的Foo A,我希望在按条形排序所有Foos时获得最接近A的10个Foos。

问题是,我不想手动执行此操作,因为它会因为100k +实体而非常慢。

一个想法是使用偏移和限制,如下所示:

ofy().load().type(Foo.class).order("-bar").offset(offset).limit(limit).list();

但这要求我知道我的Foo A的位置,我不知道。

我有一个工作解决方案,这是一个单独的权利,只存储所有Foos的位置,并每分钟更新一次表。它变得非常慢并导致OutOfMemoryError,所以我需要一些不同的东西。

有人想拍这个吗?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

List<Foo> biger = ofy().load().type(Foo.class).filter("bar >=", A.getBar()).order("bar").limit(10).list();

List<Foo> lower = ofy().load().type(Foo.class).filter("bar <", A.getBar()).order("-bar").limit(10).list();

List<Foo> closest = getClosest(A, biger, lower);