es一:核心概念和原理

1.学习方法:看官方文档,更新速度快,不要在书上花太多时间

2.倒排索引:基于document,分词,把词拆开,统计,出现频次,相关度越高,说明结果越精准

分词以后,统计各分词在document出现的id,这就是倒排索引,然后根据搜索关键词,把关键词分词,再去匹配分词,匹配到之后将各分词内的id集合,去统计原词汇出现的相关度

3.倒排索引数据结构:

包含关键词的document list(id);

关键词在每个doc中出现的次数,TF term frequency;

关键词在整个索引出现的次数,IDF inverse doc frequency;idf越高,相关度越低(说明在每个doc中都出现了,相关度不高,搜索精准度不高) ;

关键词在当前doc中出现的次数;

每个doc的长度,越长相关度越低;

包含整个关键词的所有doc的平均长度;

4.lucene:java的jar包,

功能:

创建倒排索引;

提供了复杂api;

缺点:

单点;(如果lucene做集群节点一旦宕机,数据丢失;如果做集群,需要zk去管理,管理成本高,单台节点的承载能力有限,需要人工做负载,所以要用es,因为es本身就是分布式的)

5.es集群:面向开发者友好,只需要通过客户端调用,不需要自己在每个节点创建索引,并且自动做负载和冗余副本

pb级别的数据;

分布式的搜索,存储,数据分析引擎;

优点:

面向开发者友好,屏蔽了Lucene的复杂性,集群自动发现;

自动维护数据在多个节点上的建立;

会帮我们处理搜索请求的负载均衡;

自动维护冗余副本,保证部分节点宕机的情况下仍然不会有任何数据丢失;

es基于lucene提供了很多的高级功能,复合查询,聚合分析,基于地理位置(例如疫情地图);

对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别的数据;

对于小公司,开箱即用,门槛低,上手简单;

相比传统数据库,提供了全文检索,同义词处理(美丽的,漂亮的),相关度排名,聚合分析以及海量数据的近实时(NTR)处理;

应用领域:

百度(全文检索,高亮,搜索推荐);

各大网站的用户行为日志(用户点击,浏览,收藏,评论);

BI(商业智能,数据分析,数据挖掘统计),用户画像等;

github几千亿行代码,代码托管平台;

ELK(elasticsearch (数据存储),logstash(日志采集),kinaba(可视化));

6.es核心概念

集群:

每个集群至少包含两个节点;

集群中的每个节点,一个节点不代表一台服务器,一台服务器可以有多个节点;

Field:一个数据字段,与index和type一起,可以定位一个doc;

Document:可以理解为行,es的最小数据单元,一个json对象

Type:逻辑上的数据分类,

Index:一类相同或者类似的doc,比如一个员工索引,商品索引;

shard 分片:如果一台机器宕机,可以保证其他节点数据的完整性,横向扩展,es会自动做shard rebalance

primary shard ,replica shard副本分片(性能提升很高),高可用,横向扩容;

一个Index包含多个shard,默认5个primary shard,默认每个primary shard分配一个replica shard,primary shard的数量在创建索引的时候设置,如果想修改,需要重新创建索引;

每个shard 都是一个lucene实例,有完整的创建索引的处理请求能力;

es会自动在Nodes上为我们做shard均衡;

一个doc是不可能同时存在于多个primary shard中的,但是可以存在多个replica shard中;

副本分片主要是查询压力的,不做写请求;

p和对应的r不能同时存在于同一个节点,所以最低的可用配置是两台节点,互为主备;

猜你喜欢

转载自blog.csdn.net/ZhaoXia_hit/article/details/106879816