ElasticSearch简介
ElasticSearch:智能搜索,分布式搜索引擎。
是ELK的一个组成。是一个产品,而且是非常完善的产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K即使Kibana
E:ElasticSearch 搜索和分析的功能;
L:Logstach 搜索数据的功能,类似于flume(使用方法几乎跟flume一模一样)。是日志收集系统
K:Kibana 数据可视化(分析),可以用图标的方式来去展示,文不如表,表不如图,是可视化平台。
ElasticSearch优点
- 分布式的功能
- 数据高可用,集群高可用
- API更简单
- API更高级
- 支持的语言很多
- 支持PB级别的数据
- 完成搜索的功能和分析功能
- 基于Luncene,隐藏了Luncene的复杂性,提供简单的API
- ElasticSearch性能比HBase高,咱们的竞价引擎最后还是要存到ES中的
搜索引擎原理
- 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
- 搜索引擎原理就是建立反向索引。
- ES在Luncene的基础上进行封装,实现了分布式搜索引擎。
- ES中的索引、类型和文档的概念比较重要,类似于MySQL中的数据库、表和行。
- ES也是Master-slave架构,也实现了数据库的分片和备份。
- ES一个典型的应用就是ELK日志分析系统。
ES支持的语言
Cur/java/c#/python/javaScript/hph/perl/ruby
ES的作用
- 全文搜索:类似 select * from product where product_name like '%牙膏%'类似百度效果(电商搜索的效果)
- 结构化搜索:类似 select * from product where product_id = ‘1’
- 数据分析类似 select count (*) from product
ES的核心概念
-
NRT(Near Realtime)近实时
-
cluster集群,ES是一个分布式的系统:ES直接解压不需要配置就可以使用,在hadoop1上解压一个ES,在hadoop2上解压了一个ES,接下来把这两个ES启动起来。他们就构成了一个集群。在ES里面默认有一个配置,clustername 默认值就是ElasticSearch,如果这个值是一样的就属于同一个集群,不一样的值就是不一样的集群。
-
Node节点,就是集群中的一台服务器
-
Index索引(索引库):我们为什么使用ES?因为想把数据存进去,然后再查询出来。我们在使用Mysql或者Oracle的时候,为了区分数据,我们会建立不同的数据库,库下面还有表的。其实ES功能就像一个关系型数据库,在这个数据库我们可以往里面添加数据,查询数据。ES中的索引非传统索引的含义,ES中的索引是存放数据的地方,是ES中的一个概念词汇index类似于我们Mysql里面的一个数据库 create database user; 好比就是一个索引库
-
type类型:类型是用来定义数据结构的在每一个index下面,可以有一个或者多个type,好比数据库里面的一张表。相当于表结构的描述,描述每个字段的类型。
-
document(文档):文档就是最终的数据了,可以认为一个文档就是一条记录。在ES里面最小的数据单元,就好比表里面的一条数据
-
Field字段:好比关系型数据库中列的概念,一个documenr有一个或者多个filed组成。
-
shard(分片):一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。
kafka:为什么支持分布式的功能,因为里面是有topic,支持分区的概念。所以topic A可以存在不同的节点上面。就可以支持海量数据和高并发,提升性能和吞吐量。
我们为了保证数据的安全,我们引入了replica的概念,跟hdfs里面的概念是一个意思。
可以保证我们数据的安全。
在ES集群中,我们一模一样的数据有多份,能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片)
当我们去查询数据的时候,我们数据是有备份的,它会同时发出命令让我们有数据的机器去查询结果,最后谁的查询结果快,我们就要谁的数据(这个不需要我们去控制,它内部就自己控制了)。
在默认情况下,我们创建一个库的时候,默认会帮我们创建5个主分片(primary shrad)和5个副分片(replica shard),所以说正常情况下是有10个分片的。
同一个节点上面,副本和主分片是一定不会在一台机器上面的,就是拥有相同数据的分片,是不会在同一个节点上面的。
所以当你有一个节点的时候,这个分片是不会把副本存在这仅有的一个节点上的,当你新加入了一台节点,ES会自动的给你在新机器上创建一个之前分片的副本。