我知道倒排索引是索引单词的好方法,但我感到困惑的是搜索引擎实际上是如何存储它们的?例如,如果一个单词“google”出现在document - 2, 4, 6, 8 中,频率不同,应该将它们存储在哪里?具有一对多关系的数据库表对存储它们有什么好处吗?
最佳答案
完全成熟的类似 SQL 的数据库不太可能用于此目的。首先,它被称为倒排索引,因为它只是一个索引。每个条目只是一个引用。随着非关系数据库和键值存储成为与网络技术相关的热门话题。
- 您只有一种访问数据的方法(通过查询词)。这就是它被称为索引的原因。
- 每个条目都是文档引用的列表/数组/向量,因此该列表的每个元素都非常小。除了存储 documentID 之外,唯一的其他信息是存储每个元素的 tf-idf 分数。
使用方法:
如果您有一个查询词(“google”),那么您可以在倒排索引中查找该词出现的文档(在您的示例中为 2、4、6、8)。如果你有 tf-idf 分数,你可以对结果进行排序,首先报告最匹配的文档。然后你去查找文档 ID 2、4、6、8 引用了哪些文档,并报告它们的 URL 以及片段等。URL、片段等可能最好存储在另一个表或键值存储中。
如果您有多个查询词(“google”和“altavista”),您可以查看两个查询词的 II 并获得两个文档 ID 列表(2,4,6,8 和 3,7,8 ,11,19).您取两个列表的交集,在本例中为 (8),这是两个查询词都出现的文档列表。
关于database - 存储倒排索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906136/