当你在谷歌搜索时(我几乎可以肯定Altavista做了同样的事情)它会说“关于xxxx的结果1-10”......
这让我感到惊讶......这是什么意思“关于”? 他们怎么能粗略计算? 我明白为什么他们不能在合理的时间内拿出精确的数字,但他们怎么能达到这个“近似”的呢?
我确信我错过了很多理论背后的理论......
答案 0 :(得分:2)
很可能它类似于大多数SQL系统在其查询规划中使用的估计行数;表格中的一些行(确切地称为上次收集统计数据,但通常不是最新的),乘以估计的选择性(通常基于通过抽样一些小子集计算的一种统计分布模型)行)。
PostgreSQL手册有一个关于statistics used by the planner的部分,它提供了相当丰富的信息,至少如果您按照pg_stats和其他各个部分的链接进行操作。我确信这并没有真正描述谷歌的作用,但它至少会显示一个模型,你可以得到前N行和估计可能有多少。
答案 1 :(得分:1)
与你的问题无关,但是当我做一个简单的自我搜索时,我想起了我的一个朋友的一个小笑话(并且不告诉我你从未用Google搜索过你的名字)。他说过像
这样的话“哇,仅仅0.22秒即可获得5,000个结果!现在,想象一下这一分钟,一小时,一天有多少结果!”
答案 2 :(得分:1)
我想这个估算是基于统计数据的。他们不会计算所有相关的页面匹配,所以他们(我会)做的是根据一些启发式计算出大约百分比的页面与查询匹配,然后将其用作计数的基础
一种启发式方法可能是进行样本计数 - 随机抽取1000个左右的页面并查看匹配的百分比。在样本中获取一个统计上重要的答案并不需要太多。
答案 3 :(得分:1)
尚未提及的一件事是重复数据删除。一些搜索引擎(我不确定Google究竟是如何做到的)将使用启发式方法来尝试确定两个不同的URL是否包含相同(或极其相似)的内容,因此是重复的结果。
如果有156个唯一的URL,但其中9个已被标记为其他结果的重复,则更容易说“约150个结果”而不是“156个结果包含147个唯一结果和9个重复”。
答案 4 :(得分:-1)
返回精确数量的结果不值得精确计算的开销。由于知道有1,004,345个结果而不是“大约1,000,000”,所以没有多少增值,从最终用户体验的角度来看,更快地返回结果而不是计算总数的额外时间更为重要。