是否有一种算法可以利用字母倒排索引?

问题描述

我正在使用Python进行信息检索项目。我读过多个资料,包括this book,都强调要按字母顺序存储倒排索引,尽管我没有发现这样做的好处。

我阅读过的许多文档建议以以下方式存储项目:

aardvark -> doc6,doc5,doc10
apple -> doc1,doc8
...
zebra -> doc7

存储记录如何按字母顺序提高速度?检索数据时,有什么方法可以利用这个字母顺序?

解决方法

想象一下,如果索引太大,以至于无法容纳在一台机器的内存中。
然后,我们必须将索引划分为多个较小的索引,然后存储在多台计算机中。

让我们说一台机器可以存储1000个条目,而我们总共要索引100000个条目;这意味着我们将需要100台机器来存储所有条目。

现在,如果键是按字母顺序存储的,那么通过执行二进制搜索来查找单词将变得更加容易。

示例:

让我们说前缀在aaad之间的单词存储在计算机1中。
前缀在aeba之间的单词存储在机器2中。
...
...
...
前缀为yh-zz的单词存储在计算机100中。

每当我们有一个查询请求时,我们只需对单词的前缀进行二进制搜索,以找到其条目以时间复杂度O(nlogn)存储的机器。
如果索引是以随机顺序存储的,那么我们将不得不在所有机器中一字搜索该词,从而导致时间复杂度为O(n)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...