繁体   English   中英

Solr查询结果缓存工作机制是什么?

[英]What is Solr query result cache working mechanism?

我试图了解 Solr 查询结果缓存是存储“完整查询结果”还是“主查询结果”。

https://teaspoon-consulting.com/articles/solr-cache-tuning.html

q=国家:美国&fq=州:CA。 假设主查询匹配 100 个文档。 过滤器适用于 100 个文档,结果为 10 个文档。 查询缓存会保存 100 个文档 ID 还是仅保存 10 个文档 ID。 意思是,完整的结果还是只是主要的查询结果? Becoz 上面的博客读到查询缓存将保存 100 个文档。 但是查询结果缓存代码显示结果集缓存的键也包括过滤器。 希望得到确认。

我可以有任何专业知识证实这种行为吗? 必须从源代码运行 solr 并在 intellij 中调试是一种痛苦。

乍一看,那篇文章令人困惑。 如果更仔细的阅读可以解决问题,请道歉。

queryResultCache存储整个结果集,它存储queryResultWindowSize(solrconfig.xml中指定)。 因此,如果您的查询匹配 1,000,000 个文档并且 queryResultWindowSize 为 50,则此查询的缓存中仅存储 50 个文档 ID(在您的示例中为 10 个)。 想想这是一个缓存,用于存储几页的 ID,因此当用户点击“下一步”时,不必重新执行查询。

在我的示例中,在 &start + &rows 超过 50 之前,不必重新执行查询。然后,从 &start 开始,缓存中的新条目还有 50 个文档。 存储的文档尊重有关查询的所有内容。 排序顺序、分数、fq 的应用开始等。将 1M 文档 ID 存储在此缓存中是不切实际的,尤其是当您考虑到完全相同的查询很少见并且您必须保持排序时列出 1,000,000(在我的示例中),也就是“深度分页”问题。

文章还谈到了 filterCache,它确实保存了整个结果集。 然而,它只是一个由 maxDocs/8 限定的位集,每个满足 fq 子句的文档都有一个位。 在我的示例中,这个位集将设置 1,000,000 位,如果索引中有 8M 文档,则大约为 1 兆字节(即 maxDoc=8,000,000)。 这与 queryResultCache 是一个非常不同的问题,因为不涉及排序并且 Lucene 必须对每个文档进行评分。 每当分数不为零时稍微翻转一点都会增加执行时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM