ElasticSearch 简介,概念和集成

ES之前也有讲过了,它是一款高度可扩展的开源全文搜索和分析引擎,他不单单是一个搜索,他还提供一些分析功能,

搜索和分析的一个引擎,然后可以快速的,实时的对大数据进行存储,搜索,和分析,所以在我们这个大数据时代,ES刚好就有了

用武之地,然后可以用来支撑有复杂的数据搜索需求的企业级应用,在文章多起来之后,我们要进行搜索的话,显然我们需要

一款全文搜索的引擎,支持我们大数据的一个搜索

ES他有哪些特点呢,我们来做一下介绍,首先ES它是一款分布式的搜索引擎,他如何来实现分布式,他每个索引都使用

分片,每个分片又可以有多个副本,在任何的一个副本分片上,来执行这个读取,跟搜索操作,这是他分布式的一个特点,

他的索引是分布的,这就是他分布式的一个特点,正是因为他分布式的特点,所以才造就了他高可用的一个特点,为什么

说分布式他就有一个高可用呢,那么可以理解,假设我这个某一个系统,某一个系统它是非分布式的,单击的系统,他只有

一个主机,主机你不管多牛逼的一个主机,迟早都有奔溃的一天,不管什么原因,他某一天奔溃了,显然在主机上的一个系统,

他就不可用了,用不了了,那么分布式的话,他就是系统假设分布到了10台机器上,我有10个主机组成了分布式系统,那么我任何的

一台主机,挂掉了,那么剩余的仍然可以提供服务,所以在一个分布式的系统里面,若干台的主机奔溃了,他升级一下分布式系统的

一个运作,所以他仍然是可用的,服务仍然是可用的,所以为什么说他是一个高可用的原因,然后ES他也支持多种数据类型,API

他支持http的restful,我们也会用到restful的API的,他也支持原生的JAVA api,他还有一个特点是面向文档的,不需要事先去

定义一些模式,如果对nosql有了解的话,nosql是不需要事先定义一些模式的,他可以直接就创建这个文档,每个类型都定义模式,

自定义索引,然后异步导入,对于同步写入来说,异步上性能会更高,所以写入性能还是比较高的,然后他还有个特点是近实时,

就是接近实时,他的搜索性能上还是非常高的,虽然他还没有做到全实时,接近实时,为什么说它是近实时呢,我们在后面的介绍,

ES它是基于Lucene,这个我们之前也讲过,是基于Lucene,然后他还是开源协议,是遵循Apache的开源协议,ES他也是一款开源的

产品,也是遵循Apache的开源协议,这些就是ES的特点

我们对ES的核心概念,来做一下介绍,首先这个概念在之前也讲过,叫做近实时的一个概念,进实时就是接近实时,

还不是真正的实时,他其实是从搜索文档,和可搜索之间,有一个轻微的一个延迟,一般延时是在一秒左右,为什么

会有这个延时呢,我们知道Lucene,他可以做到一个真实的实时的,可以做到实时的,但是如果要做到实时的话,要么

就是牺牲索引的一个效率,为什么要牺牲索引的效率呢,因为每次搜索之后,我都要去刷新数据,牺牲查询的效率,

每次查询之前都要进行刷新,折中的方案,去自动做一个刷新,这样在创建索引之后,最多在N秒之内,就能够查询到,

近实时的一个查询,索引建立之后不会马上写入磁盘,而是存在文件系统中,根据刷新策略,定期的设置到磁盘中去,

一般刷新的参数设置在一秒左右,这就是我们延时会有一秒的原因,这就是我们为什么要称之为近实时的一个原因,

当然参数也可以做一个修改,参数叫做index_refresh_interval,来修改刷新的间隔,这就是近实时的一个概念,第二个

概念叫做集群,集群的话还是比较好理解的,集群是一个或者是多个节点的集合,它是用来保存应用全部数据的,并基于

全部节点的集成,和搜索功能,每个集群都要有一个唯一的名称,默认就是ElasticSearch,这么一个名称,这个名称是非常

重要的,另外节点要加入集群,是根据名称来的,所以不同的环境当中,尽量不要使用相同的名称,这样会导致节点在加入

名称会产生一些错误,所以在 部署多个集群的时候,每一个集群都要有自己的集群名称,什么是节点呢,节点就是单台

服务器,这个服务器用来保存数据,并参与集群的一个索引,可搜索的一个操作,那么节点也是有名称来唯一标识的,这个名称一般

是用一个UUID,通用的唯一标识符,这个名称一般是在节点启动的时候,分配给这个节点的,如果不适用默认名称的话,也可以

自定义节点的名称,可以将节点配置为,通过名称加入特定的集群,下面一个概念叫做索引,索引在之前也讲过了,用来加快

搜索速度的,在ES里面,索引是相似文档的一个集合,索引的内容是和应用本身是相关的,比如在电子商务应用中,可以用

索引来保存产品数据,订单的数据,用户的数据,每个索引都有一个名称,通过名称可以对索引中,来进行添加,更新,删除,

和搜索等等,那么在单个引擎中,可以根据需要来定义数量的一个索引,那这里就是一个索引,类型是对于一个索引中包含文档的

进一步的细分,一般通过文档的公共属性来划分的,比如在电子商务应用的场景,可以根据产品的特征,来划分成不同的类型,

我们可以把类型分为一般产品,虚拟产品,或者说是数字产品等等,这是一个类型,那么文档的概念,文档是进行索引的一个

基本单位,与索引中的类型是相对应的,比如在一个产品数据索引中,一般产品类型中,具体的产品可以有一个文档,与之对应,

那么文档使用JSON格式来表示,怎么来理解这个文档呢,他其实是在一个非结构,文档对应的是一个实体,那么文档的一个实例,

对应是实体关系型数据库中的实体的一个实例,也就是具体的某个数据,这就是文档的一个概念,分片,企业应用中呢,我们

一般存储的数量会比较大,他肯定是会超出单个节点的,所能处理的一个范围,那么ES他是会允许,把索引分成多个分片,

来存储索引的部分数据,ES会负责分片的一个分配,从可靠性的角度出发的话,你一个分片中的数据,他还需要建立一个副本,

那么ES的每一个索引,他都可以分成多个分片,并且会有多个副本,ES会自动管理节点中的分片,和副本,对这些开发人员来说,

它是透明的,为什么要设置这个分片呢,一方面他要水平的来分割,或者说缩放,这个内容卷,其次他通过这种分片,可能是分布到

多个节点,一方面可以进行一个并行,分布到多个节点上面,从而可以提高性能,吞吐量,分片的一个概念,副本已经讲过了,

分片可以分为不同的副本,分片副本的一个原因是,故障是不可避免的,使我们的系统高可用性,所以我们要使用副本,

将副本的分片要分布到不同的节点上去,这是在高可用方面来说的,那么第二个原因的话,我增加副本其实是,可以增加吞吐量,

其实我要把我的搜索,负荷分担到其他的副本上去,他可以提高他的吞吐量和搜索量,总而言之的话,索引还是可以划分成多个

分片的,那么分片又可以分成多个副本,那么默认情况下,ES他每一个索引,他会分配5个分片,以及一个副本,那么意味着一个

集群,至少会有两个节点,会拥有5个分片,以及5个副本,这样子总共会有10个分片,这就是分片跟副本的一个概念

那现在我们就演示一下,ES和Springboot是如何集成的,我们环境是这样子的,首先我们要有一个ElasticSearch服务器,

沃=我们用的是1.4.4的版本,其次是SpringData对ElasticSearch的一个支持,这么一个模块,Spring Data的ElasticSearch

的模块,第三个我们需要JNA,JNA这个库,JNA是用来访问操作系统原生的应用的,那么ElasticSearch他需要,安装这么一个

依赖,这就是我们相关的一个配置

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值