存储倒排索引

use*_*757 6 database indexing search-engine inverted-index

我知道反向索引是一种索引单词的好方法,但我感到困惑的是搜索引擎实际存储它们的方式?例如,如果文档中出现"google"一词 - 不同频率的2,4,6,8,那么它们应该存储在哪里?具有一对多关系的数据库表是否可以用于存储它们?

Una*_*dra 5

为此目的使用成熟的类似 SQL 的数据库的可能性很小。首先,它被称为倒排索引,因为它只是一个索引。每个条目只是一个参考。随着非关系数据库和键值存储成为与 Web 技术相关的热门话题。

  • 您只有一种访问数据的方式(通过查询词)。这就是为什么它被称为索引。
  • 每个条目都是文档引用的列表/数组/向量,因此该列表的每个元素都非常小。除了存储 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),即出现两个查询词的文档列表。


Jon*_*ler 4

可以肯定的是,每个主要搜索引擎都有自己的处理倒排索引的技术。它们不基于标准关系数据库技术也是一个不错的选择。

以Google的具体案例来说,可以合理猜测当前使用的技术源自Fay Chang等人2006年在Bigtable:A Distributed Storage System for Structured Data中描述的BigTable技术。不过,毫无疑问,该系统自那时以来已经不断发展。