1

我有两个依赖类:假设

  • 一个产品
  • 每个用户在该产品上最终最喜欢的标志(许多用户可以将产品标记为最喜欢的)

当我需要在用户最喜欢的产品子集中执行过滤时,我发现自己有一个问题:没有 API

例如:我想在用户 1 最喜欢的产品中搜索,标签为“运动”且颜色为“蓝色”的产品

我可以

  • 对标签和颜色标准执行 CompositeFilter,然后迭代所有产品(数千个)以找到最喜欢的 id 列表中的产品!!!哇!:-)
  • 找到收藏夹子集,并手动执行所有其他条件过滤(以编程方式,离开数据存储 API)。是的!
  • 最后但并非最不重要的一点:在产品本身(收藏列)中添加收藏用户 ID 列表,这样每次用户将产品放入收藏夹时,所有 120 次索引写入都会被重写。酷!!!

好吧,我在作弊,有一个解决方案:我可以读取收藏夹实体,然后在查询中使用具有巨大(id=x1 或 id=x2 或...)的产品的 id,这有发现自己的风险查询大小的限制。因此,我应该通过两个实体处理分页和间接光标,以获得一个非常简单的要求的读取......

是啊……想法?

最好的问候,齐德哈姆迪 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 回答