携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
Elasticsearch的介绍及安装
1.elasticsearch的介绍
1.1.elasticsearch简介
Elasticsearch是一个实时的分布式搜索引擎,它能让你以一个之前从未有过的速度和规模去搜索你的数据,它被用作全文检索、结构化搜索、分析以及这三个功能的组合
Elasticsearch是一个基于Apache Lucene的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为迄今为止最先进、性能最好的、功能最全的搜索引擎库,但是lucene只是一个库,想要用它,必须使用java来作为开发语言并将其直接集成到你的应用中,Lucene非常复杂,需要深入了解检索的相关知识来理解是如何工作的,Elasticsearch也使用java开发并使用lucene作为其核心来实现所有搜索和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单
简单来说就是:之前操作Lucene都是直接去Lucene进行操作,复杂性相当多,而有了Elasticsearch之后,Elasticsearch在Lucene的基础上又封装了一层,用户使用的时候也只是在封装好的那一层进行使用,由Elasticsearch去调用Lucene完成一些复杂性的过程,从而实现全文检索
elasticsearch简称es
1.2.elasticsearch的功能
-
分布式的搜索引擎和数据分析引擎
- 搜索就是类似于百度,查找各种网页
- 数据分析就类似于博客统计累计访问量、电商平台的销量前十
-
全文检索、结构化检索、数据分析
- 全文检索类似于sql中的模糊查询,全文进行搜索
- 结构化搜索就类似于指定查询,查找到对应的一行
-
对海量数据进行近实时处理
- 分布式:ES自定可以将海量数据分散到多台服务器上存储和检索
- 海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
- 近实时:检索个数据要花费1小时,(这时就不要近实时,做好进行离线批量处理),在秒级别对数据进行搜索和分析
1.3.elasticsearch的应用场景
站点搜索、系统搜索、数据分析
- 基维百科
- The Guardian新闻网站
- 论坛
- GitHUb
- 电商网站
- 日志数据分析
- 商品价格监控网站
- BI系统
1.4.elasticsearch的特点
- 可以作为一个大型分布式集群、处理PB级别的数据,服务大公司,也可以运行在单机上面,服务小公司
- elasticsearch主要将全文检索、数据分析以及分布式技术结合在一起,形成了独一无二的es
- 对用户而言是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下,就可以作为生产系统的环境来用了,数据量不打,操作不是太复杂
- elasticsearch作为传统数据库的一个补充,提供了数据库所不能提供的很多功能
1.5.elasticsearch的数据格式
elasticsearch使用json作为文档的序列化格式,json序列化被大多数编程语言所支持,并且已经成为nosql领域的标准格式,简单、简洁、易于阅读
JSON(JavaScript Object Notation)
Linux有个命令叫jq,这个可以查看json文件是否有语法错误
yum install jq
cat json.file | jq
2.elasticsearch术语及概念
- 索引词
- 在elasticsearch中索引词是一个能够被索引的精确值,foo,FOO,Foo几个单词是不同的索引词,索引词是可以通过term查询进行准确的搜索
- 文本
- 文本是一段普通的非结构化文字,通常文本会被拆成一个个的索引词,存储在elasticsearch的索引库中,为了让文本能够进行搜索,文本字段需要事先进行分析,当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文件
- 分析
- 分析是将文本转换成索引词的过程,分析的结果依赖于分词器,比如FOOBaR,Foo-Bar和foobar都可能会被分析成相同的索引词foo和bar,这些索引词存储在elasticsearch的索引库中
- 集群
- 集群是由一个或多个节点组成,对外提供服务,对外提供索引和搜索功能,在所有节点,一个集群有一个唯一的名称默认为elasticsearch,此名称很重要,因为每一个节点只能是集群的一部分,当该节点被设置为相同的集群名称中,就会自动加入集群,当需要有多个集群的时候,需要确保每个集群的名称不能重复发,否则节点可能加入错误的集群,一个节点只能添加一个集群
- 节点
- 一个节点是一个逻辑上独立的服务,它是集群的一个部分,可以存储数据,并参数与集群的索引和搜索功能,就像集群一样,节点也有唯一的名字,在启动的时候分配,如果你不想要默认名称,你可以定义任何你想要的节点名,这个名字在集群中很重要,在elasticsearch集群中通过节点名称进行管理和通信,一个节点可以被配置加入到一个特定的集群,默认情况下,每个节点会加入一个名称elasticsearch的集群中
- 分片
- 分片就是把一份数据分散的存储到不同的节点上
- 分片是单个Lucene实例,这是elasticsearch管理的比较底层的功能,索引是指向主分片和副本分片的逻辑空间,对于使用,只需要指定分片的数量,其他不需要做过多的事情,在开发使用的过程中,我们对应的对象都是索引,elasticsearch会自动管理集群中的所有分片,当发生故障的时候elasticsearch会把分片移动到不同的节点或者添加新节点
- 一个索引可以存储很大的数据,这些空间可以超过一个节点的物理存储限制,elasticsearch可以将索引分解成多个分片,当你创建一个索引,你可以简单地定义你想要的分片数量,每个分片本身都是一个全功能的、独立的单元
- 副本分片
- 每一个分片有零个或多个副本,副本主要是住分片的复制。有两个目的,一是增加高可用性,当主分片失败的是,可以从副本分片中选择一个作为主分片,二是提高性能,当查询的时候可以到住分片或者副本分片中查询
- 分片允许水平分割扩展数据
- 分片允许分配合并行操作,从而提高性能和吞吐量
- 索引
- 索引是具有相同结构的文档集合,类似于数据库中的库
- 类型
- 在索引中,可以定义一个或多个类型,类型是索引的逻辑分区,在一般情况下,一种类型被定义为具有一组公共字段的文档,例如运行一个博客,可以把所有的数据存储在一个索引中,在这个索引中,可以定义一类是用户数据,一类是博客数据,一类是评论数据,类似于数据库中的表
- 文档
- 文档是存储在elasticsearch中的一个json格式的字符串,它就像在关系数据库中表的一行,每个存储在索引中的一个文档都有一个类型和一个ID,每个文档搜狐一个json对象,类似于数据库中的行
- 映射
- 映射就像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型以及一个索引范围内的设置
- 字段
- 文档中包含零个或多个字段
- 主键
- ID是一个文件的唯一表示,如果在存库的时候没有提供ID,系统会自动生成一个ID
- 复制
- 复制是一个非常有用的功能,不然会有单点问题,当网络中的某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用
是博客数据,一类是评论数据,类似于数据库中的表
- 文档
- 文档是存储在elasticsearch中的一个json格式的字符串,它就像在关系数据库中表的一行,每个存储在索引中的一个文档都有一个类型和一个ID,每个文档搜狐一个json对象,类似于数据库中的行
- 映射
- 映射就像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型以及一个索引范围内的设置
- 字段
- 文档中包含零个或多个字段
- 主键
- ID是一个文件的唯一表示,如果在存库的时候没有提供ID,系统会自动生成一个ID
- 复制
- 复制是一个非常有用的功能,不然会有单点问题,当网络中的某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用