ES概述
ES是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上,它提供了一个分布式多用户能力的搜索引擎,且ES支持RestFulweb风格的url访问。
全文检索:是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
ES核心概念
index索引
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
type类型
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。和mysql中的数据库表相似。在 7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type,默认为_doc。
mapping映射
主要作用:定义索引字段中的名称,定义索引字段的类型。一个映射定义了文档结构内每个字段的数据类型。映射通过配置来定义字段类型与该类型相关联的元数据的关系。现有的映射类型和字段不能更新。
document文档
存储在ES中的主要实体叫文档,可以理解为关系型数据库中表的一行数据记录。每个文档由多个field组成。区别于关系型数据库的是,ES是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一标识。
ES集群核心概念
集群(cluster):
一个ES集群由多个节点(node)组成, 每个集群都有一个共同的集群名称最为标识
集群健康:
Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是 集群健康 , 它在
status
字段中展示为green
、yellow
或者red
。
green
所有的主分片和副本分片都正常运行。
yellow
所有的主分片都正常运行,但不是所有的副本分片都正常运行。
red
有主分片没能正常运行。
节点(node):
一个运行中的 ElasticSearch实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name配置的节点组成, 它们共同承担数据和负载的压力。
node节点的组合方式:
主节点+数据节点: 默认方式,节点既可以作为主节点,又存储数据。
主节点:负责集群的相关操作,如创建和删除索引,跟踪哪些节点是集群的一部分,并决定分片属于哪个节点。
数据节点: 节点只存储数据,对文档的增删改查操作,不参与主节点选举
客户端节点: 不会成为主节点,也不存储数据,主要针对海量请求时进行负载均衡
分片(shard):
es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配。
副本(replica):
shard的备份,预防数据的丢失,如果持有主分片的节点挂了,一个副本分片就会晋升为主分片。还可以通过副本进行负载均衡。
ES的应用范围
1,可以应用在搜索类场景。比如说电商网站、招聘网站、新闻资讯类网站、各种app内的模糊搜索。
2,可以做一些涉及地理位置的查询。
ES数据类型
String类型:
text:文本类型,存入后会被分词,将字符串转换为单个术语的列表(倒排索引) 不适合被term查询
keyword:同样为文本类型,但不会被分词,适合使用term查询。
数值类型:
数值类型,不会被分词,这类数据类型都是以确切值索引的,适合terms查询。
date类型:
日期时间格式,存入ES后会被转为UTC格式(Universal Time Coordinated世界统一时间)
复杂类型:
array:数组类型
数组中的所有值必须是相同的数据类型,在动态添加字段时,数组中的第一个值确认数据类型后,后续值必须为相同的字段类型。
object类型:
对象类型,一个文档的一个filed字段类型可以设置为一个内部对象,这个内部对象中还可以在包含对象(可以多层嵌套)。
nested类型:
嵌套数据类型,在文档属性是一个数组对象时使用,它允许对象数组彼此独立地编制索引和查询。
地理数据类型:
geo-point:地址位置数据类型,可以用来表示经纬度,ES有4种存储地理位置数据的方式。
1:地理点表示为一个对象,lat属性表示纬度,lon属性表示经度。
2:地理点表示为一个字符串,格式为:"lat,lon"
3:地理点表示为一个geohash字符串(GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串) 。
4:地理点表示为一个数组,格式为[lon,lat]
elasticsearch与mysql对比
Elasticsearch的接口语法
#verb protocol host port path
PUT http://127.0.0.1:9200/es_ypt_server_order_info_index/_doc/1
{ #请求参数 "name":"stono", "country":"China", "age":111, "date":"1999-11-11" }