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"
}

ES增删改查

https://blog.csdn.net/yhyh1233/article/details/123841585

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐