全文检索 cache 技术

Cache 是必须的,简单的思考一下,80%的cache 命中率就能让你的系统多支持4 倍的负荷!这还仅仅只是一级cache 能力,如果你用2 级cache,你的系统就可能多支持16 倍的负荷!注意这是理论值。

传统理论上认为搜索系统至少可以划分为3 级缓冲,最低一级是磁盘索引缓冲,再高一级是中间结果缓冲,最高一级是查询结果缓冲。

考虑到在使用开源代码的时候,做多级缓冲是很麻烦的,所以,这里只谈论一下如何做查询结果缓冲。

查询结果缓冲其实能够做成一个十分复杂的结构。想想,一个查询串,被解析为一棵查询树,这棵查询树的任意子树都可以作为一个缓冲的Key。至于缓冲的Value ,可以包含文档ID 列表、文档、预查文档ID 列表、预查文档等。

为了增加缓冲的命中率,你或许还会根据布尔理论来简化查询树。

最简单的最有效的办法,其实是设置缓冲的Key 为查询串本身!这点是有统计依据的,大部分用户输入的都是少于3 个词语且不包含任何布尔操作的查询串。至于Value ,也只需要缓冲前面的3 页数据,因为从第4 页开始,就几乎没有人再看了。

请注意,这个统计只是一个一般性的结果,不见得适合你的应用。