关于后端:正排索引与倒排索引

51次阅读

共计 1207 个字符,预计需要花费 4 分钟才能阅读完成。

博客:cbb777.fun

全平台账号: 安妮的心动录

github: https://github.com/anneheartrecord

下文中我说的可能对,也可能不对,鉴于笔者程度无限,请君自辨。有问题欢送大家找我探讨
正排索引和倒排索引是搜索引擎中常见的概念
正排索引指的是文档 id 到文档内容的映射,也就是将每个文档的内容存储在一个文档 ID 对应的数据结构中,便于疾速地依据文档 ID 获取文档内容。例如,在数据库中存储的数据,能够看做是一种正排索引的实现

倒排索引指的是词项到文档 ID 的映射,也就是将每个词项呈现的文档 ID 存储在一个词项对应的数据结构中,便于疾速地依据词项获取蕴含该词项的文档 ID 列表。例如在搜索引擎中应用的索引,就是一种倒排索引的实现

正排索引和倒排索引是搜索引擎实现的核心技术,它们的组合能够疾速地依据关键词搜寻相干文档,并返回相关度最高的后果

Elastic search 是一种倒排索引的实现,它应用倒排索引来疾速地搜寻和查问文档

在 ES 中,每个文档都被存储为一个 JSON 格局的文档,每个文档都有一个惟一的 ID。ES 应用倒排索引来存储每个词项呈现的文档 ID,以及每个文档中每个词项的呈现地位等信息。这使得 ES 可能高效的搜寻和查问文档

具体的例子如下
Hello world,this is a sample document.
能够转化成如下的正排索引

document_id | position | term
------------|----------|-------
1           | 1        | Hello
1           | 2        | world
1           | 3        | this
1           | 4        | is
1           | 5        | a
1           | 6        | sample
1           | 7        | document

能够看到,这个正排索引存储了文档 ID、单词地位和单词自身。如果咱们要查找蕴含单词 document 的文档,咱们能够依据这个索引疾速找到该单词所在的地位,并获取对应的文档 ID

相比之下,倒排索引存储了每个单词呈现在哪些文档中,即存储了单词 -> 文档 ID 的键值对,举个例子
Document 1: Hello world, this is a sample document.
Document 2: The quick brown fox jumps over the lazy dog.
Document 3: The sky is blue, the grass is green.
能够转化成如下的倒排索引

term     | document_ids
---------|-------------
Hello    | 1
world    | 1
this     | 1
is       | 1
a        | 1
sample   | 1
document | 1
The      | 2, 3
quick    | 2
brown    | 2
fox      | 2
jumps    | 2
over     | 2
the      | 2, 3
lazy     | 2
dog      | 2
sky      | 3
is       | 3
blue     | 3
grass    | 3
green    | 3

能够看到,这个倒排索引存储了每个单词呈现的文档 ID,如果咱们要查找蕴含单词『document』的文档,能够疾速找到蕴含该单词的文档 ID

本文由 mdnice 多平台公布

正文完
 0