
在Search Off The Record 播客的最新一集中,Google 员工John Mueller、Gary Illyes、Martin Splitt 和本周的特邀嘉宾Mariya Moeva 谈到了Google 的SiteKit,然后还谈到了服务索引。 Gary 总结了Google 服务索引的工作原理。
简而言之,加里说他上次谈到了谷歌的索引层和存储,现在他想解释索引中的结果是如何提供给搜索者的——即服务索引。 Gary 说:“服务索引实际上是我们数据中心的内容,也是人们在屏幕上获得搜索结果的地方。”
他说的服务索引“本质上是很多索引分片,它们被Caffeine 推送到我们的服务数据中心。” Gary 解释说,“这些数据中心中的每一个都会在某个地方获得10 到15 个。这些数据中心中的每一个都会获得索引分片。这些索引分片中的每一个都将包含我们已编制索引的文档。”
这些文件里有什么? “这些文档不是我们从URL 中获取的东西。它们被分解为标记。基本上,我们将它们标记化,因为我们不需要HTML 附带的所有内容,”Gary 解释说。 “例如,脚本标签。为什么我们要索引页面中的那些标记、关键字或关键短语?我们只是不需要它们。某些HTML 元素我们确实需要,原因我不会说。”
“然后这些索引分片分布在数据中心之间,”加里说。 “每个数据中心都会有一个副本,因为它应该是这样的,所以如果需要的话,每个数据中心都可以提供与结果相对相同的文档。”
他详细介绍了它们的工作原理,这是视频嵌入,他在其中更详细地讨论了这一点。谈话从14:29 开始:
这是成绩单:
[00:14:26] 加里·伊利斯:哦。好,那我来说说。在我们的最后一集中,我在谈论索引,我们在谈论。根据我们认为索引这些层的文档的服务频率,我们使用不同类型的存储。
[00:14:45] 但是我们还没有讨论服务指数,它比我们在过去的一集中讨论的内容稍微不那么抽象。服务索引实际上是我们数据中心的内容,也是人们在屏幕上获取搜索结果的地方。
[00:15:05] 我认为这不是一个有趣的话题。我只是想在我们真正投入服务之前介绍它,因为我觉得如果我不这样做,那么人们可能会误解事情,这在互联网上永远不会发生。
[00:15:23] 服务索引,本质上是由Caffeine 推送到我们的服务数据中心的许多索引分片。我不记得我们为网络搜索(一般搜索)提供服务的数据中心的确切数量,但超过10 个。
[00:15:43] 这些数据中心中的每一个都会在某个地方有10 到15 个。这些数据中心中的每一个都将获得索引分片。这些索引分片中的每一个都将包含我们已编制索引的文档。
[00:16:00] 这些文档不是我们从URL 中抓取的东西。它们被分解成令牌。基本上,我们将它们标记化,因为我们不需要HTML 附带的所有内容。
[00:16:16] 例如,脚本标签。为什么我们要为页面中的那些标记、那些关键字或关键短语编制索引?我们只是不需要它们。由于我不会说的原因,我们确实需要某些HTML 元素。
[00:16:32] 约翰穆勒:表情符号,对吧?我们也需要他们。
[00:16:34] Gary Illyes:是的,我们需要他们。这些确实非常重要。
[00:16:38] 我们将保留某些HTML 元素。我们将保留页面上出现的实际单词及其在页面上的位置,因为这也很重要,正如我们之前多次说过的那样。
[00:16:53] 然后将这些索引分片分布在数据中心之间。每个数据中心都会有一个分片的副本,因为它应该是这样的,所以如果需要的话,每个数据中心都可以提供相对相同的文档作为结果。
[00:17:09] 当然,这并不总是发生。有时,某些分片可能会滞后于数据中心,然后可能会发生有趣的事情。比如,你搜索一些东西,比方说,cookie,然后Martin 也搜索cookie,他们得到完全不同的结果。
[00:17:27] 有时这是因为我们正在查询不同的数据中心。因此,索引分片在我们查询的那些数据中心之间是不同的。
[00:17:37] 索引碎片是——我喜欢将它们视为RAR 部分文件,就像一个打包的部分文件。我一直提到这个,但是回到上世纪90 年代,例如,当我们安装 厄运,地震, 或者 帝国时代, 例如,然后我们得到了这些软盘。我记得那个…
[00:17:58] Martin Splitt:是的,Martin,软盘!呼呼!
[00:18:01] Gary Illyes:不,马丁,坐下。
[00:18:04] 例如, 帝国时代 出现在30 多张软盘上, 厄运 来吧,我想,12,然后 暗黑破坏神 I 那是在50 多岁的时候。您必须将每张软盘插入您的软盘驱动器,复制您在那里找到的文件,将它们合并,然后您将拥有用于运行游戏的最终可执行文件。
[00:18:31] 从概念上讲,索引分片与此并无太大不同。它们本质上是指数的一部分,共同构成指数的整体。
[00:18:44] 我们在许多数据中心都有许多索引分片。我不知道具体数字,但数以千计,甚至数万。这提出了挑战。挑战在于您必须在这些索引分片中找到大量文档。
[00:19:01] 如果您考虑一下,当您搜索某些内容时,您会在一秒钟内获得结果。如果您必须为每个查询查看所有索引分片,您将不会在一秒钟内提供结果,因为即使是最小的索引分片也会有几兆字节大。遍历分片中的所有记录需要时间。
[00:19:27] 为了帮助识别需要查询的索引分片,我们有一个叫做“分片索引”的东西,它可以识别某些查询的分片,它基本上是我们遇到的关键字之间的映射,或者我们在页面上遇到的标记,映射到索引分片的编号或标识符。
[00:19:55] 但这不足以在索引分片内部进行搜索。为此,我们需要一张新地图,也就是我们所说的“发布列表”。例如,它标识包含某个关键字的文档ID。
[00:20:14] 例如,如果您搜索“oatmeal cookies”,那么发布列表会告诉我们单词“oatmeal”出现在文档1、2、3、4、5、6、7 中,而“cookies”会出现在5、6、7、8、9、10。然后我们将两者的交集发送到服务。
[00:20:43] 这是过于简单化了。还有其他过程发生,例如标记化本身,这在某些语言中可能是一个挑战。但是,从概念上讲,这就是我们构建服务索引的方式。
[00:20:57] 约翰·穆勒:太酷了。所以它有点像书后面的索引,您可以在其中看到页码。然后在该页面上,通过发布列表,您会发现,“哦,它是第17 行”或类似的东西。
[00:21:09] Gary Illyes:是的,确实如此。如果我没记错的话,这实际上就是这个想法的来源。
论坛讨论于 推特.