ES基本概念及简单用法

一、ES部分名词解释

1、NRT

英文全称为Near RrealTime。中文意思为近实时,从写入数据到可以被搜索到之间有一个小于1s的延迟,使用ES进行搜索和数据分析可以达到秒级的速度。

注:由于ES写入数据到可以被索引到之间有延迟,所以对于业务中包含有保存幂等性需求时,需要注意;

在写完之后手动执行刷新操作,然后再查询,否则会可能出现数据写重的情况。

2、cluster

表示由多个节点组成的ES集群(常见集群种类:HA,HB,HP,具体可自行查阅资料)。集群有一个名称,默认是elasticsearch,可以在配置文件中通过cluster.name字段手动指定,集群最小节点数可以为1个。

3、node(集群节点)

节点也有自己的名称,默认是随机分配的,默认情况下,节点启动之后,会自动去寻找名称为cluster.name字段所指定的集群。如果在默认不修改cluster.name的情况下,启动多个节点之后,它们会自动组成一个ES集群。

4、document(文档)

它是ES中的最小数据单元,通常使用JSON数据结构表示,每个index(索引)的type(类型)中,都可以存储多个Document。

5、field(字段)

具体指的是Document中的某一个数据字段。比如学生信息文档中的学号字段。

6、index(索引)

是多个有相似结构的文档数据的集合,类似于MySQL数据库中的数据库概念。

7、type(类型)

表示某个索引下面的某种相同数据结构的结合。在较低版本的ES中,一个索引中可以有多个type,高版本中一个索引下只能有一个类型,官方建议每个索引下最好只有一个type。如果一个index下有多个type,在不同的搜索场景下可能会相互有影响,比如:一个索引下面有一个用于统计分析的type和一个用于搜索的type,如果统计请求比较慢,有可能会阻塞到查询请求。

8、shard

每个index会被拆分为多个shard,每个shard就会存放这个index的一部分数据,这此shard会散落在多台服务器上。有了shard就可以进行横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。shard又分为replica shard和primary shard,每个shard都是一个lucene index.

9、replica

每个服务器随时可能故障或宕机,此时shard就可以会丢失,因此可以为每一个shard创建多个replica副本。replica可以在shard故障时提供备用服务。保证数据不丢失或者丢失很少,多个replica还可以提升搜索操作的吞吐量和性能。

注意:

primary shard:建立索引时一次设置,不能修改,默认5个;

replica shard:可随时修改,默认1个),默认每个索引10个shard,5个primary shard, 5个replica shard,最小的高可用配置,是2台服务器。

二、ES的文档数据格式的优点

1.可以提供复杂的面向对象的数据结构;

2.如果不适用ES,使用传统的关系型数据库,复杂的对象只能拍平,放到多个关联表中,查询的时候需要查询多个表,而且还得重新组合成复杂对象,特别麻烦;

3.基于ES面向文档的特性,而且提供了倒排索引,所以可以胜任复杂的查询和检索需求;

4.使用传统,流行的文档对象来存储,很容易处理;

三、ES集群简单管理

1、集群健康状态

使用_cat相关api查看,如下:

[root@es-master ~]# curl http://localhost:9200/_cat/health?pretty

#返回结果

1549092107 02:21:47 elasticsearch green 3 3 134 67 0 0 0 0 – 100.0%

可以看出,如果集群中的所有节点都正常启动,整个集群的状态为green;

2、集群的三种状态

(1)红(red):不是所有的primary shard都是active状态的,部分索引有数据丢失了;

(2)黄(yellow):每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态,此时可以继续使用;

(3)绿(green):每个索引的primary shard和replica shard都是active状态的;

#集群启动时状态变化过程:

集群启动的时候,首先会有某些节点先启动,这些节点会被作为主节点,在所有的主节点未完全启动之前,集群此时处于red状态;

————————————————————

当主节点全部启动之后,集群状态会变为yellow状态;

————————————————————

所有的replica节点都启动完成之后,集群中的所有节点都已经齐全,此时集群变为green状态;

3、_cat中的重要api

查看集群中的节点数

[root@es-master ~]# curl http://localhost:9200/_cat/nodes?pretty

192.168.199.12 29 95 12 0.00 0.08 0.06 mdi * es-node2

192.168.199.11 41 88 25 0.64 0.75 0.57 mdi – es-node1

192.168.199.11 20 88 25 0.64 0.75 0.57 mdi – es-node3

#表示集群中有三个节点,es-node1,es-node2,es-node3;

查看集群中的分片数

[root@es-master ~]# curl http://localhost:9200/_cat/shards?pretty

student_index 3 p STARTED 1 4.3kb 192.168.199.11 es-node1

student_index 3 r STARTED 1 4.3kb 192.168.199.11 es-node3

student_index 2 p STARTED 2 8.5kb 192.168.199.12 es-node2

student_index 2 r STARTED 2 8.5kb 192.168.199.11 es-node3

student_index 1 r STARTED 1 4.4kb 192.168.199.11 es-node1

student_index 1 p STARTED 1 4.4kb 192.168.199.12 es-node2

student_index 4 p STARTED 1 4.4kb 192.168.199.11 es-node1

student_index 4 r STARTED 1 4.4kb 192.168.199.11 es-node3

student_index 0 p STARTED 0 261b 192.168.199.12 es-node2

student_index 0 r STARTED 0 261b 192.168.199.11 es-node3

#表示student_index索引默认有10个分片,5个primary和5个replica;

查看集群中的索引列表

[root@es-master ~]# curl http://localhost:9200/_cat/indices?v

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

…结果略

#默认展示的是系统索引和自己创建的索引,参数v表示查看详细信息;

_cat还有其他api,但是不是很常用,如果需要,可以通过如下命令查看即可

[root@es-master ~]# curl http://localhost:9200/_cat

/_cat/allocation

/_cat/shards

/_cat/nodes

/_cat/tasks

…其他输出结果略.

四、ES简单操作

此处以电商系统商品搜索为例,使用kibana图形化操作界面,介绍ES的简单操作。

1、创建

用法:

PUT /index_name/type_name/id

{}

例如:创建一个索引名称为shop_index,类型为productInfo,id为1的索引

PUT /shop_index/productInfo/1
{
 "name": "HuaWei Mate8",
 "desc": "Cheap and easy to use",
 "price": 2500,
 "producer": "HuaWei Producer",
 "tags": [
 "Cheap",
 "Fast"
 ]
}

2、查询

用法:

GET /index_name/type_name/id

例如:查询id为1的商品信息

GET /shop_index/productInfo/1
{
 "_index": "shop_index",
 "_type": "productInfo",
 "_id": "1",
 "_version": 1,
 "found": true,
 "_source": {
 "name": "HuaWei Mate8",
 "desc": "Cheap and easy to use",
 "price": 2500,
 "producer": "HuaWei Producer",
 "tags": [
 "Cheap",
 "Fast"
 ]
 }
}

3、修改

方法一:替换,通过ID替换,如果文档存在,则直接覆盖

用法:

PUT /index_name/type_name/id

{}

例如:将商品价格修改为2400

PUT /shop_index/productInfo/1
{
 "name": "HuaWei Mate8",
 "desc": "Cheap and easy to use",
 "price": 2400,
 "producer": "HuaWei Producer",
 "tags": [
 "Cheap",
 "Fast"
 ]
}

注意:

替换某个文档时,需要带着文档中的所有字段,否则未带着的字段会丢失,切记!!!

方法二:通过ID更新部分字段

用法:

POST /index_name/type_name/id/_update

{}

例如:将上述商品的价格改为2200

POST /shop_index/productInfo/1/_update
{
 "doc": {
 "price": 2200
 }
}

4、删除

用法:

DELETE /index_index/type_index/id

例如:删除id为1的商品记录:

DELETE /shop_index/productInfo/1

注:文章为作者原创,转载请标注出处:https://www.jinnianshizhunian.vip

手机端显示格式的问题,好多文章发布之后拍板会混乱,如果需要,可以复制上述作者网址,在PC端查看更多文章。


分享到:


相關文章: