我想有效地查询索引字段以检索索引字段不为空(存在于索引中)的所有记录。要查询的字段包含Ref<T>
到另一个实体,如果这是相关的。
我能做的是不等式搜索,例如.filter/.filterKey("fieldname >=", "a")
,其中a是我想要抓取的最小ASCII。
但这有效吗?或者我可以以某种方式进行相等搜索,它会返回索引中存在的所有记录吗?
-
这就是我的数据的样子:我想过滤“overlay”列有一个键的所有记录,并省略那些没有设置字段的记录。我想尽可能使用相等过滤器,所以我不需要复合索引(因为我在同一时间过滤其他字段)。
-
我可以用它来测试!= null
.filter("user >", "\uFFFD");
这是为了测试== null
.filter("user <", "\uFFFD");
我想这不是它应该做的方式。有没有办法用平等而不是不平等来解决这个问题?
答案 0 :(得分:7)
如果要查询索引字段为空值的实体:
ofy().load().type(Thing.class).filter("fieldname !=", null)
但是,这与相等过滤器不同。在封面下,GAE将!=视为一对过滤器(&gt;和&lt;),这带来了不等式过滤器的局限性。
如果需要对“not null”进行相等过滤,请在实体中创建一个合成索引字段,该字段使用@OnSave方法填充。您可以对'true'值使用部分索引来限制索引此额外数据的成本(即@Index(IfTrue.class)
)
答案 1 :(得分:0)
如果你的属性是String,那么比#34;!= null&#34;更有效。是用:
ofy().load().type(Thing.class).filter("fieldname >=", "");
同样,您可以使用&gt;如果您的财产是正数等,则为0