您用于解决此问题的工作量与您正在处理的存储查询的数量直接相关。
20 多年前,我们通过将存储查询视为迷你文档并根据所有必须拥有和可能拥有的术语对它们进行索引来处理存储查询。新文档的术语列表被用作针对此“查询数据库”的一种查询,并构建了一个可能感兴趣的搜索列表以运行,然后仅针对新文档运行这些搜索。这听起来可能令人费解,但是当存储的查询数量超过几个(比如从 10,000 到 1,000,000 或更多)并且您拥有支持布尔和基于相似性搜索混合的复杂查询语言时,它大大减少了我们的数量必须作为完整的查询执行——通常不超过 10 或 15 个查询。
有帮助的一件事是我们控制了整个事物的水平和垂直方向。我们使用我们的查询解析器构建了一个解析树,它用于构建我们索引查询下的必须/可能有术语的列表。我们警告客户不要在存储的查询中使用某些类型的通配符,因为这可能会导致所选查询数量激增。
更新评论:
简短的回答:我不确定。
更长的答案:我们正在处理一个自定义构建的文本搜索引擎,它的部分查询语法允许以某些方式非常有效地对文档集合进行切片,特别强调date_added
. 我们玩了很多游戏,因为我们每天要摄取 4-10,000,000 个新文档,并在具有 64MB 主内存的 DEC Alphas 上针对多达 1,000,000 多个存储查询运行它们。(这是在 80 年代末/90 年代初。)
我猜想对等价的东西进行过滤date_added
可以结合您上次运行查询的日期,或者可能是id
最后一次查询运行时间的最高日期来完成。如果您需要针对修改后的记录重新运行查询,您可以将其id
用作查询的一部分。
为了让我更具体,您将不得不更具体地了解您正在尝试解决的问题以及您正在尝试完成的解决方案的规模。