远期指数vs倒立指数为什么?

use*_*332 9 lucene solr inverted-index elasticsearch forward-indexing

我正在阅读有关倒排索引(由Solr,Elastic Search等文本搜索引擎使用)和我理解(如果我们以"Person"为例):

Person关系的属性被反转:

John -> PersonId(1), PersonId(2), PersonId(3)
London -> PersonId(1), PersonId(2), PersonId(5)
Run Code Online (Sandbox Code Playgroud)

我现在可以搜索"居住在伦敦的约翰"的人事记录

这不解决所有问题吗?为什么我们有前向(或常规数据库索引)?或者换句话说,在什么情况下常规索引是有用的?请解释.谢谢.

Ant*_*t P 20

您缺少的一点是前向索引和倒排索引之间没有真正的技术区别.在这种情况下,"前进"和"倒置"只是用于区分以下内容的描述性术语:

  • 文档中包含的单词列表.
  • 包含单词的文档列表.

如果已经存在常规(前向)索引的概念,则倒排索引的概念才有意义.在搜索引擎的上下文中,前向索引将是术语向量; 特定文件中包含的术语列表.倒排索引将是包含给定术语的文档列表.

当你明白术语"前进"和"倒置"实际上只是用于描述你所谈论的索引性质的相对术语 - 而且真正的索引只是一个索引 - 你的问题确实没有意义更多.

  • 这就是我的观点——没有功能上的区别。倒排索引只是一个索引……但是倒退了。正向索引将存储 `{ Document1: ["Hello", "this", "is", "a", "document"] }`,倒排索引将存储 (例如) `{ "Hello": [Document1 ], "this": [Document1, Document40] }` ...一个可以让您查找文档并查找内容,另一个可以让您查找单词并获取文档列表。 (4认同)
  • @Roylee没有什么可以暗示通过使用正向索引生成倒排索引.同样,该术语并不意味着您已经反转了索引,它只是键/值对"方向"的描述性术语.你不能把它理解为一个定义明确的技术术语,因为它不是一个. (3认同)

sch*_*rht 3

以下是来自 Elasticsearch 的倒排索引的解释:

Elasticsearch 使用一种称为倒排索引的结构,该结构旨在允许非常快速的全文搜索。倒排索引由出现在任何文档中的所有唯一单词的列表以及每个单词出现的文档列表组成。 https://www.elastic.co/guide/en/elasticsearch/guide/current/inverted-index.html

倒排索引用于快速全文搜索。常规索引效率较低,因为引擎会查找某个术语的所有条目,但索引速度非常快!

你可以这样说:

  • 正向索引:索引速度快,查询效率较低
  • 倒排索引:查询快,索引慢

但是,它总是与上下文相关的。如果与 MySQL 相比:myisam 读取速度快,innodb 插入/更新速度快,读取速度慢。

在这里阅读更多信息:https ://www.found.no/foundation/indexing-for-beginners-part3/