elasticsearch学习笔记
在学习elasticsearch之前,我们先要弄清楚几个问题,就是what,why和how
1.what-------elasticsearch是什么
官方概念:elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
比较笼统,可以更加直观地描述:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
其实只要知道这几个关键字:分布式 实时 搜索引擎
2.why----------为什么用elasticsearch
在引入elasticsearch前,我们的数据一般都存储在mysql上,所有的检索都是直接在数据库的查询,当数据库的数据量达到一定量时,数据库的检索效率就会很低,对此我们或许会有很多解决方案,比如对数据库采用分库分表(主从设置),数据库分库分表的确可以解决大部分数据量性能问题,但是同样还是会有两个问题无法避免:1分表多表的关联查询难度很大,不易实现(目前市场上主流的集中分库分表插件都没有很好的解决)2:没有建立索引的字段查询效率依旧不高 ; 也有人说可以采用Hbase,的确Hbase能够支持的数据量确实大(一个表可以有数十亿行,上百万列),但是它的检索是都是行级或者range,并不支持复杂的查询,一般可以用于数据挖掘(统计报表类的比较合适); 于是基于以上场景,我们去分析elasticsearch的几个特点:分布式(多shard的方式保证数据安全,也会提供自动resharding),一般不会因为数据量有性能问题,实时:elasticsearch的检索速度非常快,接近实时(注意刚刚存储的数据) 搜索引擎:相比Hbase,es的定位就是搜索索引,支持全文检索;
3.how----------我们如何使用elasticsearch
es其实使用起来非常方便,上手很容易,具体教程我会在下一节给出
使用elasticsearch前,我们先得了解它的几个概念:
Node 与 Cluster(节点与集群)
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)
Index(索引)
索引是一类文档的集合 ES会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index 的名字必须是小写(可以把把索引当成数据库)。
type(类型)
类型可以理解成一个索引的逻辑分区,用于标识不同的文档字段信息的集合。但是由于ES还是以索引为粗粒度的单位,因此一个索引下的所有的类型,都存放在一个索引下。这也就导致不同类型相同字段名字的字段会存在类型定义冲突的问题。
在2.0之前的版本,是可以插入但是不能搜索;在2.0之后的版本直接做了插入检查,禁止字段类型冲突(据说es在6.x之后会取消type)。
document(文档)
文档是存储数据信息的基本单元,使用json来表示。
shard与replica (分片与备份)
在ES中,索引会备份成分片,每个分片是独立的lucene索引,可以完成搜索分析存储等工作。分片的好处:
分片的好处:
1 如果一个索引数据量很大,会造成硬件硬盘和搜索速度的瓶颈。如果分成多个分片,分片可以分摊压力。
2 分片允许用户进行水平的扩展和拆分
3 分片允许分布式的操作,可以提高搜索以及其他操作的效率
备份的好处
1 当一个分片失败或者下线时,备份的分片可以代替工作,提高了高可用性。
2 备份的分片也可以执行搜索操作,分摊了搜索的压力。
ES默认在创建索引时会创建5个分片,这个数量可以修改。
了解了elasticsearch的基本概念之后,我们就可以接下去讲如何使用elasticsearch了