2

我想将我所有的历史电子邮件和新闻存储和索引为单独的消息文件,使用一些基于消息正文+标题的计算哈希码。然后,我还将索引其他内容——用于搜索。

对于主索引键,我的想法是使用 SHA-1 作为哈希算法并假设永远不会发生任何冲突(尽管我知道理论上可能存在)。

除了正文,我应该索引哪些标题?或者更一般地说,我应该在散列之前对消息的内存副本应用哪些转换?

我应该忽略“ReSent-*:”标题吗?我应该将断行的标题加入单行标题并删除无关的空格吗?

(我想基于某个头而不是 Message-ID 标头来索引消息的原因是因为 Message-ID 标头的格式不统一。)

4

1 回答 1

1

您应该精确地散列构成消息唯一性的内容。如果两条消息可能因“ReSent-*:”标头的存在而不同,但仍必须被视为“相同”消息,则这些标头不得是散列内容的一部分。同样,如果相同的消息可能在标头语法上有所不同,那么您应该规范化标头语法。仅当输入完全相同时,诸如 SHA-1 之类的散列函数才会返回相同的输出,其中的每一位都是相同的。

现在,如果使用 Message-ID 对您来说就足够了,除了格式问题,还有一个简单的方法:只需对 Message-ID 进行哈希处理。散列消息 ID 将具有您可以索引的常规、固定大小、随机格式。

于 2010-03-02T18:29:10.673 回答