关于ElasticSearch的倒排索引机制

一、什么是索引

索引(Index)是数据库中用于提高数据检索效率的一种数据结构。它相当于书籍的目录,可以帮助我们快速定位到书中的内容。在数据库中,索引使数据库系统无需扫描整个表即可快速找到所需的数据,从而大大加快了查询速度。

索引的作用

加快数据检索速度:通过索引,数据库系统可以不必扫描整个表来定位特定的数据行,而是直接通过索引快速定位到目标数据。
加快表之间的连接速度:在执行连接(JOIN)操作时,如果连接条件列上有索引,那么数据库系统可以更快地找到需要连接的行。
减少查询中分组和排序的时间:索引可以加快分组(GROUP BY)和排序(ORDER BY)操作的速度,因为索引本身就是一种排序的数据结构。
使用索引的唯一性约束:创建唯一索引可以确保表中每一行数据的唯一性,这有助于保持数据的完整性和一致性。

索引的缺点

尽管索引可以极大地提高查询效率,但它也有其缺点:

占用额外的物理空间:索引需要占用额外的磁盘空间来存储索引数据。
降低更新表的速度:当对表中的数据进行增加、删除和修改操作时,数据库系统也需要同时更新索引,这会增加额外的开销,从而降低更新表的速度。
优化查询与维护索引的权衡:并不是所有的查询都需要索引,也不是索引越多越好。过多的索引会导致查询优化器在决定使用哪个索引时花费更多时间,从而降低查询性能。

什么是倒排索引

倒排索引(Inverted Index)是一种用于全文搜索的数据结构,它将文档中的每个单词映射到包含该单词的所有文档的列表中,并用该列表替换单词。

和正排索引有什么区别

与传统正排索引的区别:正排索引是以文档对象的唯一ID作为索引,以文档内容作为记录的结构;而倒排索引则是将文档内
容中的单词作为索引,将包含该词的文档ID作为记录的结构。

二、倒排索引的组成

ES的倒排索引主要由以下两部分组成:

词项词典(Term Dictionary):
词项词典存储了所有文档中出现过的词项(单词),并分配一个唯一的词项ID。
它类似于传统数据库中的索引表,但这里的索引项是文档中的单词,而不是文档的ID。
倒排列表(Posting List):
对于词项词典中的每个词项,倒排列表存储了包含该词项的所有文档的列表。
每个倒排列表项(Posting)通常包含文档ID、词频(TF,即Term Frequency,表示词项在文档中出现的次数)、位置(Position,表示词项在文档中的分词位置)等信息。

三、倒排索引的工作原理

在这里插入图片描述
1.分词:首先,对文档内容进行分词处理,将连续的文本拆分为多个单词。
2.索引构建:根据分词结果,构建词项词典和倒排列表。对于每个单词,将其添加到词项词典中,并在倒排列表中记录包含该单词的所有文档ID、词频和位置等信息。
3.搜索过程:当用户输入查询关键词时,搜索引擎首先在词项词典中查找该关键词对应的倒排列表。然后,根据倒排列表中的文档ID、词频和位置等信息,快速定位包含该关键词的文档集合,并进行相关性排序和结果展示。

四、倒排索引的优点

高效搜索:倒排索引允许搜索引擎在不需要遍历整个文档集合的情况下,快速定位包含特定词项的文档,大大提高了搜索效率。
支持复杂查询:倒排索引不仅可以用于简单的关键词搜索,还可以支持短语搜索、模糊匹配、词项聚合等多种复杂查询操作。
易于扩展:随着文档数量的增加,倒排索引可以灵活地扩展和更新,以适应不断变化的搜索需求。

五、总结

分词会在如下两个时机使用:

创建或更新文档时(Index Time),会对相应的文档进行分词处理
查询时(Search Time),会对查询语句进行分词
1.查询时通过analyzer指定分词器
2.通过index mapping设置search_analyzer实现
3.一般不需要特别指定查询时分词器,直接使用索引分词器即可,否则会出现无法匹配的情况

ES的倒排索引是其实现高效搜索和分析功能的关键技术之一。通过构建词项词典和倒排列表,ES能够快速定位包含特定词项的文档集合,并支持多种复杂的查询操作。这种数据结构在搜索引擎、网站搜索、文本分类等场景中得到了广泛应用,并成为了现代信息检索技术的重要组成部分。我们在使用主次数据库分级的时候,就会经常使用ElasticSearch。例如:Radis,MongoDB等使用非关系型数据库时。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值