【发布时间】:2020-01-03 06:17:26
【问题描述】:
我有一个前缀到行的映射,看起来像这样:
{
"x": [9],
"far": [1,2,3,4,5],
"car": [1,4,5]
}
键是索引搜索词,数组是匹配的行的排序列表。很简单,一个基本的倒排索引。对于这个问题,我们假设 a-z0-9 字符的最大长度为三个
字符(上限或 36+(36^2)+(36^3)=47,988 个组合,虽然在实践中可能要少得多,比如说大约 10k 个组合)。
但是,棘手的部分是我可能有大约 1000 万行,而低基数项目可能有一个包含所有 1000 万行的(无意义的)列表。在我的计算中,一个 10M 行的数组本身在未压缩时为 88.9MB。
压缩这些经常重复的数组的建议方法是什么?看来这在搜索中一定很常见,我想了解更多关于处理大型和重复前缀映射的最佳方法,例如上面的。
【问题讨论】:
-
你能把“所有行”的情况特殊化吗?
-
@user202729 我想是这样 - 那将如何完成? “所有行”与“无行”有何不同?例如,如果在搜索中只返回了一行而不是返回了一行,该怎么办?
-
@MattTimmermans -- 感谢您的链接。在上述情况下,我可以研究在上述情况下使用开源 (C/C++) 中的任何已知算法/结构吗?
-
不知道 C/C++ 实现,但任何全文搜索引擎都会使用类似的东西来发布帖子列表。在 Java 中,我建议从 Elastic Search 中窃取一个。
标签: c algorithm search compression inverted-index