主题:【原创】闲话Google集群 [6] 同步的苦恼 -- 邓侃
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里面有动态索引的技术。
动态索引如何实现,说起来比较费事。以后再聊。
- 相关回复 上下关系8
🙂借问老兄一个问题: 看看 字57 2008-10-13 01:26:33
🙂Gmail的邮件标签 邓侃 字56 2008-10-13 07:05:38
🙂Gmail中的每个邮件都可以由用户分配任意多个标签 看看 字414 2008-10-13 17:45:04
🙂倒排索引和动态索引
🙂TAG检索 我猜应该是在客户端实现的 肉猫 字256 2008-10-14 02:21:21