2

当您在 Google 中搜索时(我几乎可以肯定 Altavista 做了同样的事情)它说“结果 1-10 of about xxxx”...

这一直让我感到惊讶......它是什么意思“关于”?
他们怎么能粗略计算呢?
我确实理解为什么他们无法在合理的时间内得出一个精确的数字,但他们是如何达到这个“近似”的呢?

我敢肯定,我错过了这个背后的很多理论......

4

5 回答 5

2

它很可能类似于大多数 SQL 系统在其查询计划中使用的估计行数。表中的行数(与上次收集统计数据时完全一致,但通常不是最新的)乘以估计的选择性(通常基于通过抽样一些小子集计算的一种统计分布模型行数)。

PostgreSQL 手册中有一个关于规划器使用的统计信息的部分,它提供了相当丰富的信息,至少如果您按照指向 pg_stats 和其他各个部分的链接进行操作。我敢肯定,这并不能真正描述谷歌所做的事情,但它至少显示了一个模型,您可以在其中获得前 N 行,并估计可能还有多少行。

于 2008-09-28T23:34:26.490 回答
1

与您的问题无关,但让我想起了我的一个朋友在进行简单的自我搜索时开的一个小玩笑(不要告诉我您从未在 Google 上搜索过您的名字)。他说了类似的话

“哇,大约 5,000 个结果在 0.22 秒内!现在,想象一下,一分钟、一小时、一天有多少结果!”

于 2008-09-28T23:26:21.457 回答
1

我想估计是基于统计数据。他们不会计算所有相关的页面匹配,所以他们(我会)做的是根据一些启发式大致计算出与查询匹配的页面百分比,然后将其用作计数的基础.

一种启发式方法可能是进行样本计数 - 随机抽取 1000 页左右的样本,然后查看匹配的百分比。样本中不需要太多就可以获得具有统计意义的答案。

于 2008-09-28T23:33:38.847 回答
1

尚未提及的一件事是重复数据删除。一些搜索引擎(我不确定谷歌具体是如何做到的)会使用启发式方法来尝试确定两个不同的 URL 是否包含相同(或极其相似)的内容,因此是重复的结果。

如果有 156 个唯一 URL,但其中 9 个已被标记为与其他结果的重复,则说“大约 150 个结果”而不是“156 个结果包含 147 个唯一结果和 9 个重复”之类的内容更简单。

于 2009-01-05T15:13:55.150 回答
-1

返回确切数量的结果不值得准确计算的开销。由于知道有 1,004,345 个结果而不是“大约 1,000,000 个”并没有太大的附加值,因此从最终用户体验的角度来看,更快地返回结果而不是计算总数的额外时间更为重要。

来自谷歌自己: “谷歌对搜索结果总数的计算是一个估计。我们知道一个大概的数字很有价值,通过提供一个估计而不是一个确切的帐户,我们可以更快地返回高质量的搜索结果。”

于 2008-09-28T23:30:08.980 回答