栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ES 索引

ES 索引

ES 索引

Elasticsearch(以下称之为 ES)是一款基于 Lucene 的分布式全文搜索引擎,擅长海量数据存储、数据分析以及全文检索查询。Lucene 是 Apache 下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,它是 ES 实现全文检索的核心基础,索引文档以及搜索索引的的核心流程都是在 Lucene 中完成的。 基础结构

MySQLES
database数据库index索引库
table表type类型
row行,记录document文档
column列filed字段
索引

索引类似于Mysql数据库中的库概念,在ES之前的版本是有type这个概念的,后来的版本去掉了type,所以索引又有表的概念。简单的说,索引就是文档的容器,是一类文档的集合,逻辑空间上的分类,物理空间上的分片 倒排索引

ES中使用的是倒排索引,Mysql中的是正排索引,通过key去查value,而倒排索引是通过value去查keyMysql中的一张表

IDNameAgeSex
1hjx24
2Bob24
3Alan26

如果在ES中存储上表中的数据,ES会创建以下的索引

TermPosting List
hjx1
Bob2
Alan3
24[1,2]
263
1
[2,3]

Term是字段值,Posting List是其所属的id数组

Term Dictionary

你会发现,本来Mysql中我存储三行数据就可以了,而在ES中却存储了七行数据,哪里高效了?ES为了查询Term快速,将所有Term排序,然后二分法查找Term,LogN的查找效率,类似查字典表,这个就是Term Dictionary。 Term Index

当数据量多的时候,Term Dictionary的量也很大,放在缓存中不现实,而Term Index就像是字典中的索引页一样,比如我找A开头的有哪些,分别在哪页等等,在Term Dictionary的基础上又加了一层索引,可以看成一棵树。当然,Term Index不会保存所有的Term Dictionary,只是保存了Term的一些前缀与Term Dictionary之间的映射关系,再结合FST压缩技术,Term Index可以保存在内存中,这样从Term Index查询到Term Dictionary的block位置之后,再去磁盘中查找Term,就大大减少了访问磁盘的次数。

FST

FST(Finite State Transducer):有限状态传感器在这里使用moth、month、munt、mount、top、pop演示结果

FST有两个优点:1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;2)查询速度快。O(len(str))的查询时间复杂度。FST以字节的方式存储所有的term,这种压缩方式可以有效的缩减存储空间,使得term index足以放进内存,但这种方式也会导致查找时需要更多的CPU资源。Term Index放在内存中,Term Dictionary在磁盘中,所以使用ES查询时,先查询Term Index然后去磁盘中查找Term Dictionary所在的block块,获取其Posting List

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761286.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号