问题描述
我正在使用Python进行信息检索项目。我读过多个资料,包括this book,都强调要按字母顺序存储倒排索引,尽管我没有发现这样做的好处。
我阅读过的许多文档建议以以下方式存储项目:
aardvark -> doc6,doc5,doc10
apple -> doc1,doc8
...
zebra -> doc7
存储记录如何按字母顺序提高速度?检索数据时,有什么方法可以利用这个字母顺序?
解决方法
想象一下,如果索引太大,以至于无法容纳在一台机器的内存中。
然后,我们必须将索引划分为多个较小的索引,然后存储在多台计算机中。
让我们说一台机器可以存储1000个条目,而我们总共要索引100000个条目;这意味着我们将需要100台机器来存储所有条目。
现在,如果键是按字母顺序存储的,那么通过执行二进制搜索来查找单词将变得更加容易。
示例:
让我们说前缀在aa
和ad
之间的单词存储在计算机1中。
前缀在ae
和ba
之间的单词存储在机器2中。
...
...
...
前缀为yh
-zz
的单词存储在计算机100中。
每当我们有一个查询请求时,我们只需对单词的前缀进行二进制搜索,以找到其条目以时间复杂度O(nlogn)存储的机器。
如果索引是以随机顺序存储的,那么我们将不得不在所有机器中一字搜索该词,从而导致时间复杂度为O(n)。