正排索引与倒排索引

BitPathfinder
• 阅读 479

博客: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多平台发布

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
添砖java的啾 添砖java的啾
4年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
Stella981 Stella981
3年前
Elasticsearch的filter的caching(缓存)机制详解
编程界的小学生 2017122707:50:54直接举例说明1.假设现在要在倒排索引中去搜索字符串(xxx)比如如下有个倒排索引列表:!Elasticsearch的filter的caching(缓存)机制详解(https://imgconvert.csdnimg.cn/aHR0cDovL3AxLXR0LmJ5dGV
Stella981 Stella981
3年前
Lucene 源码分析之倒排索引(二)
本文以及后面几篇文章将讲解如何定位Lucene中的倒排索引。内容很多,唯有静下心才能跟着思路遨游。我们可以思考一下,哪个步骤与倒排索引有关,很容易想到检索文档一定是要查询倒排列表的,那么就从此处入手。检索文档通过调用IndexSearcher.search(Queryquery,intn)方法返回匹配的文档。publiccla
可莉 可莉
3年前
18个常用 webpack插件,总会有适合你的!
!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
mysql之索引
一.索引:索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中1.1.创建一个索引:mysqlcreateindexix_classontb3(class_id);QueryOK,0rowsaffected(0.02sec)
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
倒排索引关键点普及
倒排索引倒排索引是什么?为什么es、hbase、doris、starrocks都有倒排索引?倒排索引(英文:InvertedIndex),是一种索引方法,常被用于全文检索系统中的一种单词文档映射结构。现代搜索引擎绝大多数的索引都是基于倒排索引来进行构建的,
BitPathfinder
BitPathfinder
Lv1
再相逢,相顾无言,却无泪千行。
文章
3
粉丝
0
获赞
0