1

我有一个数据,例如根据以下内容: 在此处输入图像描述

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

请让我知道是否有任何其他替代方法可以实现这一目标。谢谢。

4

1 回答 1

1

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

对于内容中的每个项目,创建将“内容”映射到“行ID”的倒排索引,即创建另一个2 列的表,即。内容(字符串)、行 ID(逗号分隔的字符串)。

对于您的第一行,在该表中添加条目 {Azd, 1}, {Zax, 1}, {Gfd, 1}..., {Mni, 1}。对于第二行,添加新内容字符串的条目。对于第一行中已经存在的内容字符串(例如“Gfd”),只需将新的行 ID 附加到您为第一行创建的条目中。因此,Gfd 的行看起来像 {Gfd, 1,2}。

完成处理后,您将拥有将“内容”字符串映射到存在此内容字符串的所有行的表。


为将“Range”映射到“RowID”执行相同的倒排索引,并创建另一个 Range(int)、RowIDs(逗号分隔字符串)表。

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


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

于 2017-04-04T20:09:31.573 回答