事实上,「查找附近的人」和「检索相关的网页」这两个功能的本质是非常相似的。在这两个功能的实现中,我们都没有明确的检索目标,也就都不需要非常精准的检索结果,只需要保证质量足够高的结果包含在 Top K 个结果中就够了。所以,非精准 Top K 检索也可以作为优化方案,来实现「查找附近的人」功能。那具体是如何实现的呢?
我们可以通过限定「附近」的范围来减少检索空间。一般来说,同一个城市的人往往会比不同城市的人距离更近。所以,我们不需要去查询所有的人,只需要去查询自己所在城市的人,然后计算出自己和他们的距离就可以了,这样就能大大缩小检索范围了。那在同一个城市中,我们也可以优先检索同一个区的用户,来再次缩小检索范围。这就是 非精准检索的思路了。
在这种限定「附近」区域的检索方案中,为了进一步提高检索效率,我们可以将所有的检索空间划分为多个区域并做好编号,然后以区域编号为 key 做好索引。这样,当我们需要查询附近的人时,先快速查询到自己所属的区域,然后再将该区域中所有人的位置取出,计算和每一个人的距离就可以了。在这个过程中,划分检索空间以及对其编号是最关键的一步,那具体怎么操作呢?我们接着往下看。