在软件工程中,我们一直在创建索引(例如,在数据库中),但我也听到很多人谈论倒排索引。这两者之间有什么根本不同的东西吗?他们听起来像是一回事。
答案 0 :(得分:191)
一个常见用途是"...to allow fast full-text searching."
这两种类型表示方向性。一个带你通过索引前进,另一个带你通过索引向后(反向)。而已。在这里发现并不神秘。否则,这两种类型是相同的,只是您拥有的信息的问题,因此您正在尝试找到哪些信息。
为了解决您的问题,我认为实际上没有办法知道为什么使用它是今天的。定义哪个是forward
以及哪个是inverted
的唯一原因是我们都可以就这些问题进行对话,每个人都知道我们正在谈论的方向。想想“左”和“右”这两个词:它们是相对的。哪个是无关紧要的,除了每个人都需要同意哪一个是“左”,哪一个是“正确”以使这些词具有意义。如果作为一种文化,我们决定左右翻转,那么你就会有同样的问题来弄清楚“右转”和“左转”是什么,因为商定的意义已经改变了。然而,命名是任意的,所以哪个(哪个本身)无关紧要 - 重要的是我们都同意的含义。
在你提出的评论中,“请不要只定义条款”,你错过了这一点,而且我认为你只是在他们之间完全没有区别的时候挂断了措辞。
为了未来读者的利益,我现在将提供几个“前向”和“倒置”索引示例:
如果您认为索引的倒数与inverse of a function in mathematics类似,其中逆是一种具有不同形式的特殊事物,那么您就错了:这不是这种情况。< / p>
在搜索引擎中,您有一个文档列表(网站上的页面),您可以在其中输入一些关键字并获得结果。
forward index(或只是索引)是文档列表,以及哪些字词出现在其中。在网络搜索示例中,Google抓取网页,构建文档列表,找出每个页面中显示的单词。
inverted index是字词列表,以及它们出现的文档。在网络搜索示例中,您提供了单词列表(您的搜索查询),Google会生成文档(搜索结果链接)。
它们都是索引 - 这只是你要去哪个方向的问题。转发来自文档 - >转换为&gt;单词,反转来自单词 - >转换为&gt;文档。
另一个例子是DNS查找(它采用主机名,并返回IP地址)和反向查找(采用IP地址,并为您提供主机名)。
书后面的索引实际上是一个倒排索引,由上面的例子定义 - 单词列表,以及在书中找到它们的位置。在一本书中,目录就像一个正向索引:它是本书所包含的文档(章节)列表,除了不在这些部分中列出单词,目录只是给出了这些文件(章节)中包含的内容的名称/一般描述。
手机中的转发索引是您的联系人列表,以及与这些联系人关联的电话号码(小区,家庭,工作)。 倒置索引允许您手动输入电话号码,当您点击“拨号”时,您会看到此人的姓名,而不是号码,因为您的手机已经取了电话号码并找到了您与之相关的联系人。
答案 1 :(得分:19)
他们之所以将其称为倒置,只是因为已有一个前向指数。以搜索引擎为例,它由两部分组成:第一部分是“网络爬虫和解析器”,它从一个文件到另一个文件构建索引,第二部分是搜索数据库,它从一个文件到另一个文件构建一个索引。由于存在第一个索引,我们自然将第二个索引称为反向索引。
如果您将图书的TOC(目录)命名为索引,那么您应该将图书末尾的索引称为“倒排索引”。或者,在另一方面,您可以将TOC称为倒排索引。
答案 2 :(得分:6)
通常在谈论索引时,您指的是为了加速应用程序(例如MySQL或其他RDBMS Consult MySQL the docs)已经完成的一些附加计算或存储过程结果。索引也可以与缓存等相关。
反向索引创建的文件结构主要用于(全文)搜索。
倒置索引包含两个主要文件:
在词汇表中是从文本中提取的常用词(当然是在过滤黑名单词之后的代词)。 occurences文件保存单词和文档之间的连接(word1出现在doc1和doc2中,而不是doc3中)。它以矩阵的形式表示。
在上图中显示了创建上述两个文件的过程。
如果你对这个问题更进一步了解,我可以推荐一本由Ricardo Yated撰写的好书 - 现代信息检索(See it on Amazon) - 关于我认为的第200页。
希望它有所帮助: - )
答案 3 :(得分:6)
normalocity has already wonderfully differentiated但是对于为什么一个被称为前向索引而另一个被称为反向索引的问题,也许这就是为什么它们被称为这样的原因---
以搜索引擎抓取和索引(或构建图书索引)为例,您可以在抓取网页(或阅读图书)或前进时同时构建转发索引。因此,如果您有10个要抓取的网页(或一本书中的10个章节),您可以抓取第一个网页(阅读第一章),然后制作出现在网页中的单词列表(出现在本章中的单词)并继续对于其他网页(其他章节)的此过程,所以当您抓取所有10个网页(阅读所有10个章节)时,您的转发索引已完成,每个网页(章节)指向其包含的单词列表强>
但要制作倒排索引,您必须抓取所有10个网页(阅读10章),然后从每个文档列表中取出每个单词,并确定哪些文档包含该单词。 所以这就像你爬网页后面一样(阅读本书的章节)。所以它被称为倒排索引。
这只是我的推测。
答案 4 :(得分:4)
索引有很多种类型。例如,B树,R树,哈希...出于不同的目的,我们必须选择正确的索引。
倒置索引是一个特殊的索引。反向索引通常用于全文搜索引擎。使用倒排索引我们可以尽快找到文档(或文档集)中的单词。想想内存和cpu的限制,其他索引无法完成这项工作。
您可以阅读lucene文档了解更多详情。它是一个开源搜索引擎。 http://lucene.apache.org/java/docs/index.html
答案 5 :(得分:2)
在倒排索引中,我们有以下形式:
word1-&GT;它出现的文档列表(排序顺序)
word2-&GT;它出现的文档列表(排序顺序)
它对搜索引擎查询处理非常有用,因为它允许我们查找单词出现的文档。
您可以使用受监督的机器学习来构建此倒排索引。
答案 6 :(得分:2)
术语&#34;倒置词索引&#34;指的是关系的变化 包含多个单词的单个文档,包含每个唯一单词 (或识别)许多文件的清单。这实际上是采取一对多关系(文档到单词)和反转(或逆转)它,以便新的&#34;倒置&#34;现在存在一对多关系,这是与Many-Documents相关的每个唯一词(即包含该词的所有词)。它的起源真的很简单,术语“反向索引”#34;在计算机和电子高速索引甚至存在之前很久就被用来描述相同类型的手动索引(是的,诚然,我是一个古老的geezer程序员,几乎已经足够考虑Grace Hopper a&#34;当COBOL是一种闪亮的新语言时,甜美的小姐&#34;适合追求的年龄)。请不要丢弃我们的geezers,因为我们偶尔会提供一个有用的,甚至可能有价值的历史性的一两点 - 当我们的个人RAM仍在工作时,就是这样。 [笑容]
答案 7 :(得分:0)
还有一个区别:
与正向索引相比,使用倒排索引处理更新的成本很高。
前向索引通过仅在相应的文档索引中反映更改来轻松处理更新,而在倒排索引中,相同的更改必须反映在倒排索引中的多个位置。