倒排索引和普通旧索引有什么区别?

在软件工程中,我们始终创build索引(例如,在数据库中),但是我也听到很多人谈论倒排索引。 两者之间有什么根本的不同吗? 他们听起来像是一样的东西。

一个常见的用法是“…允许快速全文search”。

这两种types表示方向性 。 一个带你通过索引,另一个带你通过索引向后 (相反)。 而已。 在这里揭开神秘的面纱。 否则,这两种types是相同的,这只是一个问题,你什么信息,并作为一个结果,你试图find什么信息

为了解决您的问题,我不认为实际上有一种方法可以知道为什么今天使用它。 定义哪个方向是forward ,哪个方向是inverted的唯一原因是我们都可以谈论他们,每个人都知道我们正在谈论的方向。 想想“左”和“右”这两个词:它们是相对的。 除了每个人都需要认同哪一个是“左”,哪一个是“正确的”才能使这个词具有意义,哪一个并不重要。 如果作为一种文化,我们决定左右翻转,那么在商定意义发生变化之后,你会有同样的问题来判断“右转”与“左转”是什么。 然而,命名是任意的,哪一个(本身)无关紧要 – 重要的是我们都同意这个意思。

在你提出的评论中,“请不要只是定义条款”,你错过了这个观点,而且我认为你只是在他们之间完全没有任何区别的时候就挂断了措词。

为了未来读者的利益,我现在提供几个“正向”和“反向”的索引例子:

示例1:Websearch

如果你认为指数的倒数是math中函数的倒数,倒数是具有不同forms的特殊情况,那么你就错了:这里不是这样。

在search引擎中,您有一个文档列表(网站上的页面),您可以在其中input一些关键字并返回结果。

正向索引 (或正好索引)是文档列表 ,以及哪些词出现在其中。 在networkingsearch示例中,Google抓取网页,构build文档列表,确定每个页面中出现哪些单词。

倒排索引是单词列表 ,以及它们出现的文档。 在networkingsearch示例中,您提供了单词列表(您的search查询),Google将生成文档(search结果链接)。

他们都是索引 – 这只是你要去哪个方向的问题。 前进是从文件→到→字,倒是从文字→到→文件。

示例2:DNS

另一个例子是一个DNS查找(它需要一个主机名,并返回一个IP地址)和一个反向查找(它需要一个IP地址,并给出主机名)。

例3:一本书

一本书后面的索引实际上是一个倒排索引 ,正如上面的例子所定义的 – 一个单词列表,以及在书中的位置。 在一本书中,目录就像是一个前向索引 :它是书中包含的文档(章节)的列表,除了在这些章节中列出单词之外,目录只是给出了一个名称/一般描述载于这些文件(章节)。

例4:你的手机

您手机中的正向索引是您的联系人列表,以及哪些电话号码(小区,家庭,工作)与这些联系人相关联。 倒排索引允许您手动input电话号码,而当您点击“拨号”时,您将看到该人的姓名,而不是号码,因为您的手机已经拿到了电话号码,并find了与之相关的联系人。

他们称之为倒转,因为已经有一个前向索引。 以search引擎为例,它由两部分组成:第一部分是“networking爬虫和parsing器”,它build立了一个文档到一个文档的索引,第二部分是search数据库,它build立了一个从文档到文档的索引。 由于第一个索引的存在,我们自然把第二个索引称为倒排索引。

如果你把一本书的TOC(Table of Content)命名为索引,那么你应该把本书最后的索引称为“倒排索引”。 或者,另一方面,您可以将TOC作为倒排索引。

通常在谈到索引时,是指为了加快应用程序(例如MySQL或其他RDBMS 向MySQL请教文档 )添加的计算结果或已存储的结果。 索引也可以与caching等有关

倒排索引创build文件的结构主要是(全文)search的意图。

反转索引由两个主要文件组成:

  • 词汇
  • OCCURENCES

词汇是从文本中提取的常用单词(当然,在过滤黑名单词(如代词)之后)。 出现文件保存单词和文档之间的联系(word1出现在doc1和doc2中,而不是doc3中)。 它以matrix的forms表示。

索引过程 - 倒排索引

在上面的图中显示了创build这两个文件的过程。

如果你是这个问题的进一步互动者,我可以向你推荐一本由里卡多·耶特(Ricardo Yated) – 现代信息检索(Modern Information Retrieval)( 请参阅亚马逊网站 )撰写的精彩图书。

希望能帮助到你 :-)

索引有很多种类。 例如,B树,R树,哈希…为了不同的目的,我们必须select正确的索引。

倒置索引是一个特殊的索引。 倒排索引通常用于全文search引擎。 使用倒排索引我们可以尽可能快地find文档中的单词(或文档集)。 考虑内存和CPU的限制,其他索引不能完成这项工作。

你可以阅读lucene文档了解更多细节。 这是一个开源的search引擎。 http://lucene.apache.org/java/docs/index.html

normalocity已经很好地区分了前向和倒序索引,但是为什么一个被称为前向索引,另一个是倒排索引呢,也许这就是为什么他们被这样称呼的原因—

以search引擎爬行和索引(或书籍build立索引)为例,可以在抓取网页(或读取书籍)或前进时同时build立前向索引。 因此,如果您有10个网页可以抓取(或书中有10个章节),则可以抓取第一个网页(请阅读第一章),然后制作出现在网页中的单词列表(本章中出现的单词)并继续这个过程适用于其他网页(其他章节),所以当你抓取所有的10个网页(全部10章)时,你的转发索引是完整的,每个网页(章节)指向它包含的单词列表

但要制作倒排索引,您必须抓取所有10个网页(请参阅10章),然后从每个文档列表中取出每个单词,并确定哪些文档包含该单词。 所以这就像是一旦抓取网页后退(阅读本书的章节) 。 所以它被称为倒排索引。

这只是我的猜测。

在倒排索引中,我们有以下forms:

word1->文件列表(按sorting顺序)

word2->文件列表(按sorting顺序)

这对于search引擎查询处理非常有用,因为它可以让我们find单词出现的文档。

你可以使用监督机器来build立这个倒排索引。

还有一个区别:

与正向索引相比,使用倒排索引处理更新是昂贵的。

前向索引通过反映仅在相应文档索引中的更改而容易地更新,而在倒排索引中,相同的更改必须反映在倒排索引中的多个位置上。