大学生做静态网站,本地环境搭建网站,洛阳网站建设设计公司,网站建设需要了解哪些信息文章目录 概要一、正排索引二、倒排索引三、QA四、参考 概要
很早就研究了Es倒排索引的具体实现#xff0c;但对倒排索引和正派索引的定义不是那么清晰#xff0c;本文就是简述本人对二者的理解。 正排索引和倒排索引的概念来源于 正排索引是文档(ID)到关键词的映射A四、参考 概要
很早就研究了Es倒排索引的具体实现但对倒排索引和正派索引的定义不是那么清晰本文就是简述本人对二者的理解。 正排索引和倒排索引的概念来源于 正排索引是文档(ID)到关键词的映射已知文档找关键词倒排索引是关键词到文档(ID)的映射已知关键词找文档。 注意这里的文档是指文档ID,而非文档本身但通过文档ID可以找到文档的数据实体 这里的文档ID并非必须是MySQL中的主键Es中的Doc IdMongoDB的ObjectId而是任何可以定位到文档的唯一特定词。 ps:明确我们这里讨论的文档是文档包含多个字段字段对应具体值的结构比如MySQL、Es、MongoDb等都是这种层级结构很多博文说文档映射关键词就是本文中字段的具体值到所包含关键词的映射过程。
一、正排索引
正排索引forward index也叫attribute or profile index是通过对doc某特定字段正排字段的具体值建立索引在将具体值分词后得到不少于1个的关键词索引中记录了这些关键词内容、位置、次数等信息。常用来进行过滤统计排序或算分使用。 正排索引中“正指的是从doc field—doc field keys的映射过程 其优点是结构简单、建立方便适用于文档量较小的情况。对于大规模的文档集正排索引的检索效率较低因为需要扫描所有文档以找到包含特定关键字的文档。 假设有一系列文档文档中有若干字段其中以name字段建立正排索引形式如下
name字段值关键词信息文档(ID)my is tom,hello tommy,is, tom, hello1you are tomyou,are,tom2my is bob,he is johnmy,is,bob,he,john3
当然了组织索引的具体数据结构暂不讨论可以BTree、HashMap、SkipList等等。 但是我们可以通过正排索引快速的定位某个文档是否包含特定关键词,以及关键词次数、位置等信息。 显而易见正排索引更符合人类整理信息的习惯构建简单但查找效率低下一般数据检索采用倒排索引除非在特定情况下否则正排索引实用性价值不大。 二、倒排索引
倒排索引inverted index是通过对doc某特定字段的具体值进行分词后得到不少于1个的关键词根据这些关键词建立索引索引中记录了关键词所对应文档的ID、位置、次数等信息。 倒排索引中的倒指的是从doc field keys-doc id的映射过程。由于每个关键词对应的文档在动态变化所以倒排索引的建立和维护都较为复杂但是在查询的时候由于可以一次得到查询关键字对应的所有文档所以效率很高。在全文检索中检索的快速响应是一个最为关键的性能而索引建立由于在后台进行尽管效率相对低一些比如Es文档插入后默认1s后才能搜到但不会影响整个搜索引擎的效率。 关键词信息文档(ID)my1,3is1,2,3tom1,2hello1you2are2bob3he3john3 在实际应用中通常会将正排索引和倒排索引结合起来使用。首先使用倒排排索引对文档集进行初筛找到包含查询关键字的文档然后使用正排索引对文档进行排序等操作。 三、QA
MySQL的 BTree索引是正排索引还是倒排索引 首先声明本人观点MySQL的 BTree索引既不符合正排索引定义也不符合倒排索引定义,没必要非要将其关联起来不管是正排倒排还是BTree都是提高查询效率的方法。非要关联的话BTree索引具有正排和倒排的某些特性聚簇索引偏向正排索引非聚簇索引偏向倒排索引聚簇索引通过主键组织文档数据非聚簇索引是辅助提升查询效率的手段。主键类似文档ID,非聚簇索引字段值类似关键词。 正排索引有应用吗 在Es中就有正排索引被称为Doc Values其将文档中每个字段的值采用列式结构存储通常存储在磁盘中查询是会被加载到内存中。主要用于存储和检索字段原始值以便进行快速的聚合、排序和脚本操作特别适用于数值、日期、布尔和不分词字符串的字段。 四、参考
1]Lucene 正排索引、倒排索引 2]ES倒排索引、正排索引 3]Difference between Inverted Index and Forward Index 4]Forward index 5]Indexing for Beginners 6]elasticsearch实战-doc values列式存储算法 7]Es doc values正排索引