1

私は2つの依存クラスを持っています:言ってみましょう

  • 製品
  • その製品のユーザーごとの最終的なお気に入りフラグ (多くのユーザーが製品にお気に入りとしてフラグを立てることができます)

ユーザーのお気に入りの製品のサブセットでフィルタリングを実行する必要がある場合、問題が発生します。そのための API はありません。

例: ユーザー 1 のお気に入りの商品で、タグが「スポーツ」で色が「青」の商品を検索したい

どちらでもいい

  • タグと色の基準で CompositeFilter を実行し、すべての製品 (数千) を繰り返して、お気に入りの ID リストにあるものを見つけます!!! おお!:-)
  • お気に入りのサブセットを見つけて、他のすべての基準フィルタリングを手動で行います (プログラムによって、データストア API を離れます)。はい!
  • 最後になりましたが、製品自体 (お気に入りの列) にお気に入りのユーザー ID のリストを追加して、ユーザーが製品をお気に入りに追加するたびに、120 回のインデックス書き込みがすべて書き換えられるようにします。クール!!!

わかりました、ごまかしています。解決策があります。Favorite エンティティを読み取ってから、巨大な (id=x1 または id=x2 または...) を持つ製品のクエリで ID を使用できます。自分自身を見つけるリスクがあります。クエリサイズの制限。したがって、非常に単純な要件の読み取りを取得するには、2 つのエンティティを介してページネーションと間接カーソルを処理する必要があります...

すっごくええ... アイデア?

宜しくお願いします。 Zied Hamdi http://1vu.fr

4

1 に答える 1

1

キーフィルタとプロパティ フィルタを組み合わせることができます。上記のデータを理解すると、クエリは次のようになります。

Query q =  new Query("Product");

// favourite product key filter (max 30 in listOfProductIDs because this is IN query)
query.addFilter(Entity.KEY_RESERVED_PROPERTY,
                        Query.FilterOperator.IN, listOfProductIDs);

// add the property filters
query.addFilter("color", Query.FilterOperator.EQUAL, "blue");
query.addFilter("tag", Query.FilterOperator.EQUAL, "sport");
于 2013-07-09T12:55:56.030 に答える