字符串和整数范围集合的散列方法

Hashing methodology for collection of strings and integer ranges

我有一个数据,例如:

我需要将内容与为内容和范围字段提供的输入匹配到 return 匹配行。如您所见,Content 字段是字符串的集合,而 Range 字段是两个数字之间的范围。我正在查看散列数据,用于与散列输入匹配。正在考虑迭代单个字符串哈希码的集合并将其存储在内容字段中。对于 Range 字段,我正在考虑使用区间树。但是接下来的挑战是,当我对内容输入和范围输入进行哈希处理时,我将如何找到哈希码是否存在于为内容字段中的字符串集合生成的哈希码中,以及范围字段中是否存在哈希码。

如果有任何其他替代方法可以实现此目的,请告诉我。谢谢

您的问题有一个简单的解决方案:倒排索引。

对于内容中的每个项目,创建映射 'Content' 到 'RowID' 的倒排索引,即创建另一个 2 列的 table,即。内容(字符串),RowIDs(逗号分隔的字符串)。

对于第一行,在 table 中添加条目 {Azd, 1}、{Zax, 1}、{Gfd, 1}...、{Mni, 1}。对于第二行,为新内容字符串添加条目。对于第一行中已存在的内容字符串(例如 'Gfd'),只需将新行 ID 附加到您为第一行创建的条目即可。所以,Gfd 的行看起来像 {Gfd, 1,2}。

完成处理后,您将拥有 table,其中 'Content' 个字符串映射到存在此内容字符串的所有行。


对 'Range' 到 'RowID' 的映射执行相同的倒排索引,并创建另一个 table 的范围(整数),行 ID(逗号分隔的字符串)。

现在,您将有一个 table,其行将告诉哪些行 ID 中存在哪个范围。


最后,对于您必须处理的每个查询,从倒排索引 tables 中获取相应的 Content 和 Range 行,并对这些逗号分隔列表进行交集。你会得到你的答案。