ElasticSearch 的知识梳理

ElasticSearch 的知识梳理

Chapter 1:ElasticSearch的基本介绍

1.1.什么是elasticsearch?

  • elasticSearch 是一款基于Java语言开发的,主要是用于进行全文检索的一款搜索引擎,底层是lucene
  • elasticSearch 分布式的集群架构, 可以用于存储海量的数据, 可以在海量数据前进行搜索处理工作;

1.2.elasticsearch可以做什么?

  • 信息检索
  • 企业内部系统搜索
    • l 关系型数据库使用like进行模糊检索,会导致索引失效,效率低下
    • l 可以基于Elasticsearch来进行检索,效率杠杠的
  • 数据分析引擎
    • Elasticsearch 聚合可以对数十亿行日志数据进行聚合分析,探索数据的趋势和规律。

1.2.什么叫全文检索?

1.2.1. 结构化数据与非结构化数据
  • l 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等
  • l 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件
1.2.2. 搜索结构化数据和非结构化数据
  • l 使用SQL语言专门搜索结构化的数据
  • l 使用ES/Lucene/solr建立倒排索引,根据关键字就可以搜索一些非结构化(文本)的数据
1.2.2.1.倒排索引
  • 倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件

1.2.3. 全文检索
  • 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置、以及出现的次数
  • 用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了

1.3.ES 和 solr的区别

  • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
1.3.1. json
  • json在java中 本质上讲就是一个有一定格式的字符串

  • 相关格式:

    第一类格式:  {key1:value1,key2:value2 ..... }
    
    第二类格式:  [value1,value2,value3 .....]
    
    以上两类, 可以进行嵌套使用: 
    例如: 
    {key1:value1,key2:[v1,v2,v3...],key3:values3}
    [{key1:value1,key2:value2},{key1:value1,key2:value2},{key1:value1,key2:value2}....]
    
    思考: 看到什么样数据格式, 能够想出其转换成 json的样子
    
    例如1: 
    	List<String> 
    	转换后的json:  [v1,v2,v3...]
    	Map<String,String> :
    	转换后的json: {k1:v1,k2:v2...}
    	pojo类: person类  里面有三个成员变量 name  age  address
    	转换后的json: {name:'',age:'',address:''}
    	List<Person> : 
    	转换后的json: [{name:'',age:'',address:''},{name:'',age:'',address:''}...]
    
    例如2:List<Map<String,List<String>>>
    	转换后的json:  [{'':['','','']},{'':['','','']}]
    
    记忆: 
    	对于List  set 类型 一般使用 [] 括号
    	对于 map  pojo类型, 一般都是 {} 
    				
    如何才能将对应数据类型, 转换为Json呢? 在市场上提供了非常多的转换工具
    fastjson:阿里提供的一款转换工具
    Gson:  谷歌公司提供转换工具
    JackJson: 是Java中spring框架采用....
    
    

1.4. elasticsearch中的核心概念

  • index:索引库在一个ES中可以构建多个索引库的, 理解为MySQL中数据库,或者 hbase中命名空间;
    type:类型在一个索引库下可以构建多个类型,相当于在MySQL中一个数据库下面可以构建多个表,或者在		命名空间下构建多个表
    ES在最新 6.x版本后, 已经不允许在一个索引库下有多个不同类型, 只允许有一个了
    filed: 字段在索引库中,可以有多个字段,同时每个字段拥有数据类型的,类似于表中有多个字段,每个		 字段有自己的类型
    document:文档描述的是索引库中一行数据, 一个文档就表示一行数据, 类型与表中row
    mapping:映射用于设置索引库中字段的数据类型,比如说,字段采用什么类型,字段是否需要分词,是否需			要索引是否需要保存(原始数据)....
    setting: 设置用于对索引库设置,比如设置索引库有多少个分片多少个副本....
    cluster: 集群表示ES的集群
    node: 节点ES的各个节点
    shards: 分片一个索引库可以被分为多个分片  默认为 5
    replicas: 副本一个分片可以被分为多个副本  默认为 2
    
    注意:
    	分片的数量不受节点的限制
    	副本的数据最多和节点的数量是一致的: 副本数量 <=节点的数量
    	副本一般为 :2 或者 3
    

1.5. elasticsearch的分布式集群架构

  • elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。es中存储数据的基本单位是索引;

  • 首先建立一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。接着就是这个shard的数据实际是有多个备份,就是说每个shard都有一个primary shard,负责写入数据,但是还有几个replica shard。primary shard写入数据之后,会将数据同步到其他几个replica shard上去。
    通过这个replica的方案,每个shard的数据都有多个备份,如果某个机器宕机了,没关系啊,还有别的数据副本在别的机器上,这样就实现高可用了。
    es集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理的工的,比如维护索引元数据,负责切换primary shard和replica shard身份之类的。要是master节点宕机了,那么会重新选举一个节点为master节点。如果是非master节点宕机了,那么会由master节点,让那个宕机节点上的primary shard的身份转移到其他机器上的replica shard。接着你要是修复了那个宕机机器,重启了之后,master节点会控制将缺失的replica shard分配过去,同步后续修改的数据之类的,让集群恢复正常。
    其实上述就是elasticsearch作为一个分布式搜索引擎最基本的一个架构设计;
    
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值