database - 存储倒排索引

标签 database indexing search-engine inverted-index

我知道倒排索引是索引单词的好方法,但我感到困惑的是搜索引擎实际上是如何存储它们的?例如,如果一个单词“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/

相关文章:

sql-server - SQL Azure 导出/Bacpacs 和外键完整性

performance - 如何修改现有的 MongoDB 索引?

c# - 使用 Linq To SQL 进行简单搜索

artificial-intelligence - 确定数据库中项目之间的相似性

java - Neo4j 数据检索中出现空点异常

mysql - 如何为mysql数据库表中的另一列创建特定列的唯一键

sql-server - 如何收缩我的 SQL Server 数据库?

MySQL 数据库索引性能问题

sql-server - 创建索引时崩溃

php - 搜索引擎使用php和mysql,六个字段变成一个查询?