西西河

主题:【原创】闲话Google集群 [6] 同步的苦恼 -- 邓侃

共:💬33 🌺52
全看分页树展 · 主题 跟帖
家园 倒排索引和动态索引

Gmail标签的实现,说难也不难,说容易也不容易。

Gmail邮件的检索,是依靠inverted index来实现的。不妨用Lucene来体验一下inverted index(倒排索引)的功能。

在Lucene里面,每个document,被分为很多fields。譬如email的To,Cc,Bcc,Topic,Body等等,都是fields。把每个document拆分为多个fields,然后把每个fields里的string取出,按terms建立inverted index。

如果增加一个field,“label”,那么建立inverted index的时候,也相应增加相关索引。

如果有些email没有label怎么办?如果没有label,那么按照label来检索就找不到。找不到不是坏事,就像有些email没有Cc一样。

听起来很容易,当然前提是对搜索引擎技术需要比较了解。如果我前面的文字读起来费解,不妨先玩玩Lucene。花一个下午熟悉一下Lucene,再回头看我写的东东,或许就明白了。

为什么说难?主要是动态建索引的问题。

建inverted index不是一件轻松的活儿,通常每天只更新一次。但是注意到使用gmail时,你刚刚收到的email,就能被查到,而不是明天才能被查到,这是为什么?这是因为gmail里面有动态索引的技术。

动态索引如何实现,说起来比较费事。以后再聊。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河