我正在尝试对 GAE 的数据存储执行相当复杂的查询,基本上,订阅者可以订阅来自特定城镇或任何城镇 (*)、特定国家或任何国家 (*)、特定 ... 或任何 . .. (*)
现在,当我想通知订阅者有关来自 ZA 的新闻时,我需要找到匹配 country=ZA 以及匹配 country=* 的所有订阅者,并且对于其他字段也是如此。
Query<Subscriber> query = ofy().load().type(Subscriber.class);
query = query.filter("searchCategory IN", Arrays.asList(new String[]{"*", category}));
query = query.filter("searchCity IN", Arrays.asList(new String[]{"*", city}));
query = query.filter("searchSuburb IN", Arrays.asList(new String[]{"*", suburb}));
query = query.filter("searchTown IN", Arrays.asList(new String[]{"*", town}));
query = query.filter("searchProvince IN", Arrays.asList(new String[]{"*", province}));
query = query.filter("searchCountry IN", Arrays.asList(new String[]{"*", country}));
query = query.limit(100);
QueryResultIterator<Subscriber> iterator = query.iterator();
while (iterator.hasNext()) {
Subscriber subscriber = iterator.next();
System.out.println(iterator.getCursor().toWebSafeString()); // exception here
}
我正在使用任务队列一次通知大量订阅者,一次通知 100 个(取决于查询,结果介于 20k 和 2M 之间),游标似乎是将大量结果分解为可管理块的合乎逻辑的方式...直到我运行应用程序并尝试获取游标时遇到空指针异常 - 结果表明使用 IN 语句时不支持游标。
因为 NOT_EQUAL 和 IN 运算符是通过多个查询实现的,所以使用它们的查询不支持游标,使用 CompositeFilterOperator.or 方法构造的复合查询也不支持。
看到我不能使用游标,在这种情况下有什么替代方法?