【问题标题】:Is there an algorithm that takes advantage of an alphabetized inverted index?有没有利用按字母顺序排列的倒排索引的算法?
【发布时间】:2020-12-12 00:20:02
【问题描述】:
我正在使用 Python 进行信息检索项目。我阅读的多个来源,包括this book,都强调按字母顺序存储倒排索引,尽管我没有发现这样做的任何好处。
我读过的许多文件都建议按以下方式存储项目:
aardvark -> doc6, doc5, doc10
apple -> doc1, doc8
...
zebra -> doc7
按字母顺序存储记录如何提高速度?在检索数据时有什么方法可以利用这个字母顺序吗?
【问题讨论】:
标签:
performance
search
information-retrieval
alphabetical
inverted-index
【解决方案1】:
想象一下,如果索引太大以至于无法容纳在单台机器的内存中。
然后我们必须将索引划分为多个较小的索引并存储在多台机器中。
假设一台机器可以存储 1000 个条目,我们总共有 100000 个条目要索引;这意味着我们需要 100 台机器来存储所有条目。
现在如果键是按字母顺序存储的,那么通过二分查找查找单词会变得更容易。
例子:
让我们说前缀介于 aa 和 ad 之间的单词存储在机器 1 中。
前缀在ae和ba之间的单词存储在机器2中。
...
...
...
带有前缀yh - zz 的单词存储在机器 100 中。
每当我们收到查询请求时,我们只是对单词的前缀进行二进制搜索,以找到其条目存储的机器,时间复杂度为 O(nlogn)。
如果索引以随机顺序存储,那么我们将不得不在所有机器中一个一个地搜索单词,导致时间复杂度为 O(n)。