ElasticSearch重要概念及简单用法

接着上一篇ElasticSearch搭建的环境继续学习,从概念开始,本篇文章将介绍ElasticSearch中的一些重要概念及部分原理性概念,如下内容中简称为ES。

1、ES部分名词解释

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

注:因为ES写入数据到能够被索引到之间有延迟,因此对于业务中包含有保存幂等性需求时,须要注意;
    在写完以后手动执行刷新操做,而后再查询,不然会可能出现数据写重的状况。

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

3.node:集群中的节点。节点也有本身的名称,默认是随机分配的,默认状况下,节点启动以后,会自动去寻找名称为cluster.name字段所指定的集群。若是在默认不修改cluster.name的状况下,启动多个节点以后,它们会自动组成一个ES集群。api

4.document:文档。它是ES中的最小数据单元,一般使用JSON数据结构表示,每一个index(索引)的type(类型)中,均可以存储多个Document。服务器

5.field:表示字段,具体指的是Document中的某一个数据字段。好比学生信息文档中的学号字段。数据结构

6.index:索引。是多个有类似结构的文档数据的集合,相似于MySQL数据库中的数据库概念。curl

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

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台服务器。

2、ES的文档数据格式的优势

1.能够提供复杂的面向对象的数据结构;
2.若是不适用ES,使用传统的关系型数据库,复杂的对象只能拍平,放到多个关联表中,查询的时候须要查询多个表,并且还得从新组合成复杂对象,特别麻烦;
3.基于ES面向文档的特性,并且提供了倒排索引,因此能够胜任复杂的查询和检索需求;
4.使用传统,流行的文档对象来存储,很容易处理;ui

3、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
green  open   .monitoring-es-6-2019.01.27     kXMATwLHShGoGrAhOVPZqg   1   1      39439          432     48.3mb         24.1mb
green  open   .monitoring-kibana-6-2019.01.27 PpgWm9PSRXKU385_pQis2g   1   1       1512            0        1mb        531.7kb
green  open   .elastichq                      19vJX4__TcunPjMCfybmdA   5   1          1            0       14kb            7kb
green  open   student_index                   8VHSS7wyQIadWBcNWJsGPQ   5   1          5            0     43.9kb         21.9kb
green  open   student                         VXHrKYNcSRKELb7WSzToCw   5   1          2            0     23.8kb         11.9kb

默认展现的是系统索引和本身建立的索引,参数v表示查看详细信息;

  • _cat还有其余api,可是不是很经常使用,若是须要,能够经过以下命令查看便可
[root@es-master ~]# curl http://localhost:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/nodes
/_cat/tasks
...

4、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

本篇文章简单介绍了ES的一些重要概念及基本用法,为后续内容作铺垫,下篇文章将继续ES的多种搜索方式!欢迎评论转发!

后续文章将更新在我的小站上,欢迎查看。

相关文章
相关标签/搜索