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 の結果) の膨大な数のサブスクライバーに通知しています。カーソルは、膨大な数の結果を管理可能なチャンクに分割する論理的な方法のように思えました。 ... アプリケーションを実行し、カーソルを取得しようとして Null Pointer Exception が発生するまで - IN ステートメントを使用する場合、カーソルがサポートされていないことが判明しました。
NOT_EQUAL および IN 演算子は複数のクエリで実装されるため、それらを使用するクエリはカーソルをサポートせず、CompositeFilterOperator.or メソッドで構築された複合クエリもサポートしません。
この状況でカーソルを使用できない場合の代替手段は何ですか?