• Elasticsearch的倒排索引是什么?


    什么是ES?

    Elasticsearch是基于 Apache Lucene【lusen】的搜索引擎,支持Restful API风格【可以使用常见的HTTP请求来访问】,并且搜索速度很快,可以提供实时的搜索服务。

    其实Elasticsearch的功能有很多,比如分布式存储、实时数据分析等很多方面。使用ES的好处有几点:

    1. 系统解耦。使用ES之后,我们的搜索功能就完全独立于数据库了,这样就不会影响到其他业务的性能。
    2. 数据分析。深度分析用户行为,用户对于哪个社区感兴趣,对于哪一条帖子感兴趣,对我们来说至关重要。
    3. 可以达到毫秒级的查询。因为使用的是倒排索引。

    什么是倒排索引?

    倒排索引创建流程

    1. 倒排索引会首先将文档(索引中的记录)进行分词,得到多组数组,类似于<词条,文档ID>;
    2. 然后将词条和文档ID关联,记录当前词条在多少个文档中存在。

    在这里插入图片描述

    倒排索引检索流程

    1. 通过Term Index定位:首先,系统使用Term Index(以FST(有限状态转换器)的形式保存在内存中)来快速定位到词典中可能包含目标词项的区块(Block)。由于Term Index只存储词项的前缀信息,并且使用了高效的FST结构,这一步的查找速度非常快,并且内存消耗很低。
    2. 在词典中查找:一旦定位到了可能的区块,系统就可以在词典(Term Dictionary)中按照其内部的数据结构(如排序数组、B树等)进行精确的查找。由于这一步的查找范围已经大大缩小,因此查找速度也很快。

    通过这种方式,词项索引(Term Index)和词典(Term Dictionary)的结合使用可以在不消耗大量内存的情况下实现高效的词典查找,从而支持全文检索系统中的快速查找操作。

    倒排索引数据结构
    倒排索引由Trem Index, 字典和倒排列表组成。

    • Trem Index在内存中,保存前缀词,用FST这种数据结构维护。
    • 词汇表就是使用分词器拆分出来的词语,一般用B + 树来维护;
    • 倒排列表就是包含这个词语的文档信息集合。【文档信息包括:文档ID、词语出现频率、词语出现位置、词语开始结束位置等信息】

    为什么叫做倒排索引?

    想象一个场景,我们想要在很多篇文章中找到每一个关键词,常规的寻找方法是遍历每一篇文章,找有没有该关键词。是由文档指向词汇的。
    但是在倒排索引中,我们记录了该词汇在哪些文档中出现过,是词汇指向文档的,所以叫做倒排索引。

    分词器的使用

    分词器是搜索引擎的一个核心组件,负责对文档内容进行分词(在 ES 里面被称为 Analysis),也就是将一个文档转换成 单词词典(Term Dictionary) 。单词词典是由文档中出现过的所有单词构成的字符串集合。为了满足不同的分词需求,分词器有很多种,不同的分词器分词逻辑可能会不一样。
    ● IK Analyzer: 最常用的开源中文分词器,Github 地址:https://github.com/medcl/elasticsearch-analysis-ik。

  • 相关阅读:
    API接口采集商品评论数据,item_review-获得淘宝商品评论
    网络PXE启动WinPE,支持UEFI和LEGACY引导
    π110E30 单通道数字隔离器兼容代替Si8610BC-B-IS
    软考高级系统架构设计师系列之:案例分析典型试题六
    【论文精读】TextDiffuser-2:释放语言模型用于文本渲染的力量
    JS模块化
    燕之屋通过港交所聆讯:苦战IPO十余年,黄健等人提前精准套现
    【MindSpore分布式训练】训练中报错: Destroy info store failed
    数据库实验三 数据查询二
    HTML+CSS大作业 格林蛋糕(7个页面) 餐饮美食网页设计与实现
  • 原文地址:https://blog.csdn.net/weixin_62633072/article/details/137245141