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

时间:2015-08-01 11:18:18

标签: solr elasticsearch lucene inverted-index forward-indexing

我正在阅读倒置索引(由Solr,Elastic Search等文本搜索引擎使用),据我所知(如果我们采用#34; Person"作为示例):

Person关系的属性被反转:

John -> PersonId(1), PersonId(2), PersonId(3)
London -> PersonId(1), PersonId(2), PersonId(5)

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

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

2 个答案:

答案 0 :(得分:17)

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

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

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

当你明白术语“前进”和“倒置”实际上只是用于描述你所谈论的索引性质的相对术语 - 而且实际上索引只是一个索引 - 你的问题不是真的有意义。

答案 1 :(得分: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/