我想有效地查询索引字段以检索索引字段不为空(存在于索引中)的所有记录。要查询的字段包含一个Ref<T>
到另一个实体,如果这是相关的。
我能做的是不等式搜索,比如 .filter/.filterKey("fieldname >=", "a")
,其中 a 是我想要获取的最小 ASCII。
但这有效率吗?或者我能否以某种方式进行相等搜索,返回索引中存在的所有记录?
--
我的数据是这样的:我想过滤掉“overlay”列有键的所有记录,并忽略那些没有设置字段的记录。如果可能,我想使用相等过滤器,所以我不需要复合索引(因为我同时在其他字段上进行过滤)。
--
我可以用它来测试 != null
.filter("user >", "\uFFFD");
这是为了测试== null
.filter("user <", "\uFFFD");
我想这不是应该的方式。有没有办法使用相等而不是不等来解决这个问题?
最佳答案
如果要查询索引字段为空值的实体:
ofy().load().type(Thing.class).filter("fieldname !=", null)
但是,这与相等过滤器不同。在幕后,GAE 将 != 视为一对过滤器(> 和 <),这带来了不等式过滤器的局限性。
如果您需要对“not null”进行相等筛选,请在您的实体中创建一个合成索引字段,该字段使用@OnSave 方法进行填充。您可以对“真”值使用部分索引来限制索引这些额外数据的成本(即,@Index(IfTrue.class)
)
关于google-app-engine - 在 objectify 中查询字段不为 null 的所有记录的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834899/