5

如果我们想在倒排索引结构中搜索“t1 t2 t3”(t1,t2,t3 必须排队)这样的查询,我们应该怎么做?

1-首先我们搜索 "t1" 术语并找到包含 "t1" 的所有文档,然后对 "t2" 和 "t3" 执行此工作。然后找到“t1”、“t2”和“t3”位置相邻的文档。

2-首先我们搜索“t1”词并找到所有包含“t1”的文档,然后在我们找到的所有文档中,我们搜索“t2”,接下来,在这个结果中,我们找到包含“t3”的文档” 。

我有一个完整的倒排索引。我想知道上面哪些方式是优化的,(1)还是(2)?

多谢。

4

1 回答 1

5

正如维基百科条目很好地解释的那样,

倒排索引有两种主要变体:记录级倒排索引(或倒排文件索引 或只是倒排文件)包含每个单词对文档的引用列表。单词级倒排索引(或 完整倒排索引倒排列表)还包含文档中每个单词的位置。后一种形式提供更多功能(如短语搜索),但需要更多时间和空间来创建。

由于您没有告诉我们您拥有哪种变体,我们无法真正准确地回答您的问题,但考虑每种可能性都会有所帮助。

打开和搜索文档通常是一项代价高昂的操作,除非您的文档非常小,因此您希望将其最小化——而选项 (2) 并没有真正将其最小化。如果您有一个倒排列表,使用选项(1)您甚至不需要打开任何文档;如果您只有一个倒置文件,您将不可避免地需要打开文档并扫描它们(因为否则您缺乏确认单词邻接的信息)——但至少使用选项 (1) 您可以最大限度地减少必须打开的文档数量并扫描(仅包含每个单词的文档列表的交集中的那些)。

因此,无论哪种情况,选项 (1) 都更有希望(除非您的文档特别小)。

于 2010-04-17T17:16:06.243 回答