搜索 正排索引 和 倒排索引 区别

Posted 软件工程小施同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索 正排索引 和 倒排索引 区别相关的知识,希望对你有一定的参考价值。

一、什么是正排索引(forward index)

简言之,由key查询实体的过程,使用正排索引。

例如,用户表:

t_user(uid, name, passwd, age, sex)

uid查询整行的过程,就是正排索引查询

画外音:时间复杂度可以认为是O(1)。

二、什么是倒排索引(inverted index)

与正排索引相反,由item查询key的过程,使用倒排索引。

对于网页搜索,倒排索引可以理解为:

Map<item, list<url>>

能够由查询词快速找到包含这个查询词的网页的数据结构。

画外音:时间复杂度也是O(1)。

举个例子,假设有3个网页:

url1 -> “我爱北京”

url2 -> “我爱到家”

url3 -> “到家美好”

这是一个正排索引:

Map<url, page_content>。

分词之后:

url1 -> 我,爱,北京

url2 -> 我,爱,到家

url3 -> 到家,美好

这是一个分词后的正排索引:

Map<url, list<item>>。

分词后倒排索引:

我 -> url1, url2

爱 -> url1, url2

北京 -> url1

到家 -> url2, url3

美好 -> url3

由检索词item快速找到包含这个查询词的网页Map<item, list<url>>就是倒排索引

画外音:明白了吧,词到url的过程,是倒排索引

正排索引和倒排索引是spider和build_index系统提前建立好的数据结构,为什么要使用这两种数据结构,是因为它能够快速的实现“用户网页检索”需求。

画外音,业务需求决定架构实现,查询起来都很快。

每秒10W次分词搜索,产品经理又提了一个需求!!!(收藏)

以上是关于搜索 正排索引 和 倒排索引 区别的主要内容,如果未能解决你的问题,请参考以下文章

es倒排索引和正排索引

正排索引倒排索引

倒排索引,正排索引与lucene

正排索引与倒排索引(转)

正排索引和倒排索引简单介绍

ES 索引解析(倒排索引 正排索引)