如果我们想在倒排索引结构中搜索这样的查询“t1 t2 t3”(t1,t2,t3必须排队), 我们应该采取哪些方式?
1 - 首先我们搜索“t1”项并查找包含“t1”的所有文档,然后对“t2”然后执行“t3”。然后找到“t1”,“t2”和“t3”位置相互靠近的文件。
2 - 首先我们搜索“t1”项并查找包含“t1”的所有文档,然后在我们找到的所有文档中,我们搜索“t2”,然后在结果中找到文档包含“t3”。
我有一个完整的倒排索引。我想知道上面的优化方法,(1)或(2)?
非常感谢。
答案 0 :(得分:4)
正如wikipedia条目所解释的那样,
有两种主要变体 倒排索引:记录级别 倒排索引(或倒置文件索引 或只是倒置文件)包含一个列表 每个文件的参考文献 字。 字级反转索引(或 完整倒排索引或倒排列表) 另外包含的位置 文档中的每个单词。该 后一种形式提供更多功能 (如短语搜索),但需要更多 时间和空间要创造。
由于您没有告诉我们您拥有哪种变体,我们无法准确回答您的问题,但考虑每种可能性都会有所帮助。
打开和搜索文档通常是一项代价高昂的操作,除非您的文档非常小,因此您希望将其最小化 - 而选项(2)并未真正将其最小化。如果您有反向列表,使用选项(1),您甚至不需要打开任何文档;如果你只有一个倒置文件,你将不可避免地需要打开文件并扫描它们(因为你缺少确认单词邻接的信息) - 但至少使用选项(1)你最小化您必须打开和扫描的文档数量(仅限于包含每个单词的文档列表的交叉点)。
所以,在任何一种情况下,选项(1)都更有前途(除非你的文件特别小)。