0

我有一个相当简单的应用程序(如 CRM),它有很多联系人和相关标签。

用户可以搜索给出很多标准(搜索项),例如

  • 过去 10 天的更新时间
  • xxx中的标签
  • 标签不在 xxx 中
  • first_name 以 xxx 开头
  • 名字不在“史密斯”中

我了解索引以及过滤器(不在)如何不能对多个属性起作用。

对我来说,因为大多数时候,报告是在 cron 中完成的——我可以遍历所有记录并处理它们。但是,我想知道这样做的最佳优化路线。

我希望我可以接近一个查询,而不是查询“ALL”,该查询可以在 appengine 设计限制下运行,然后手动匹配查询中的其余项目。

一种方法是从第一个搜索项开始,然后获取计数,在下一个搜索项中添加另一个,获取计数。它解决了这一点,然后我手动处理带有其余搜索项的这些记录。

问题是

  • 有没有办法事先知道查询是否以编程方式有效而无需进行计数
  • 您如何确定一组不发生冲突的最佳搜索项(例如 not-in 不适用于许多过滤器)等。

我看到的唯一方法是将所有相等的过滤器作为一个查询,获取第一个不相等的过滤器,或者执行它并迭代搜索实体。

有没有可以帮助我的图书馆;)

4

1 回答 1

0

我了解索引以及过滤器(不在)如何不能对多个属性起作用。

严格来说,这不是真的。您可以创建一个“复合索引”,允许您对多个字段执行过滤器。这些会消耗额外的数据。

您还可以通过生成您自己的可用于查询的“复合字段”来生成您自己的复合索引等效项。

有没有办法事先知道查询是否以编程方式有效而无需进行计数

我不确定我是否理解您所指的有效性。

您如何确定一组不发生冲突的最佳搜索项(例如 not-in 不适用于许多过滤器)等。

“不在”过滤器并非微不足道。一种方法是创建两个数组(重复字段)。一个包含所有标记的条目,一个不包含所有标签。这将允许您轻松找到所有带有和不带有标签的实体。唯一的问题是,一旦您创建了一个新标签,您必须扫描实体,为所有实体添加一个“不在”条目。

于 2012-09-10T04:22:09.430 回答