1、 ElasticSearch介绍
Elaticsearch
,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也可以使用Java开发并使用 Lucene
作为其核心来实现所有索引和搜索的功能,但是它的目的是 通过简单的RESTful API来隐藏 Lucene
的复杂性,从而让全文搜索变得简单。
2、 Elasticsearch相关概述
2.1 ElasticSearch与MySQL对应关系
Elasticsearch 是一种NoSQL数据库(非关系型数据库),和常规的关系型数据库(比如:MySQL,Oralce等)的基本概念,对应关系如下:
Elasticsearch:index --> type --> doc --> field
MySQL: 数据库 --> 数据表 --> 行 --> 列
2.2 Elasticsearch核心概念
2.2.1 索引-index
一个索引就是一个拥有几分相似特征的文档的集合。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
2.2.2 类型-type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。
注意:
此概念已在ElasticSearch6、ElasticSearch7
中逐步去除(在 5.X 版本中,一个 index 下可以创建多个 type; 在 6.X 版本中,一个 index 下只能存在一个 type; 在 7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type)。
为何要去除type
的概念: 在Elasticsearch
设计初期,是直接查考了关系型数据库的设计模式,存在了type(数据表)
的概念。但是,其搜索引擎是基于Lucene
的,这种 “基因” 决定了type
是多余的。Lucene
的全文检索功能之所以快,是因为倒序索引
的存在。而这种倒序索引
的生成是基于index
的,而并非type
。多个type
反而会减慢搜索的速度。为了保持Elasticsearch
“一切为了搜索” 的宗旨,适当的做些改变(去除 type)也是无可厚非的,也是值得的。
2.2.3 字段-Field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。
2.2.4 映射-mapping
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。
2.2.5 文档 document
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。