前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch学习(二)使用Kibana实现对es的增删改查

Elasticsearch学习(二)使用Kibana实现对es的增删改查

作者头像
一写代码就开心
发布2021-03-02 14:45:23
4.3K0
发布2021-03-02 14:45:23
举报
文章被收录于专栏:java和python

使用Kibana

支持的命令

1 GET _cat/health?v

这个命令的意思是看这个软件的运行状态,也就是看这个软件的健康状态

代码语言:javascript
复制
Epoch(编号)      timestamp(时间戳)  cluster(集群名称)       status(健康状态)    node.total(节点总数)   node.data(数据节点数)   shards(分片数) 
1531290005 14:20:05    Elasticsearch   green           1         1        2
Pri(主分片数量)         relo(备份节点)                  init(正在初始化的)      unassign(未分配的)       pending_tasks(正在等待执行的任务) 
  2        0                    0        0             0
max_task_wait_time(挂起任务的等待时间)               active_shards_percent(活动的分片的占有百分比)
                 -                100.0%

2 创建索引

相当于创建一个数据库,这里所说的节点是 集群的数量

命令语法:PUT 索引名{索引配置参数} index名称必须是小写的,且不能以下划线’_’,’-’,’+'开头。 在Elasticsearch中,默认的创建索引的时候,会分配5个primary shard,并为每个primary shard分配一个replica shard。在Elasticsearch中,默认的限制是:如果磁盘空间不足15%的时候,不分配replica shard。如果磁盘空间不足5%的时候,不再分配任何的primary shard。Elasticsearch中对shard的分布是有要求的。Elasticsearch尽可能保证primary shard平均分布在多个节点上。Replica shard会保证不和他备份的那个primary shard分配在同一个节点上。 创建默认索引。默认索引在7版本之前是5个,到7.x之后改成1个。

PUT test_index1 执行了上面的这个命令,我们看到的结果是

代码语言:javascript
复制
{
  "acknowledged" : true,      为true是执行成功
  "shards_acknowledged" : true,    分片也执行成功
  "index" : "test_index1"    这个数据库表的名字,也就是索引的名字
}

GET _cat/indices 查看所有索引

GET _cat/shareds 查看所有分片 一共10个,5个是主,5个是从

2.1创建索引时指定分片

注意: 编写时大括号要和put命令等不在一行。重点不能把{放在索引名后,kibana会把{当成索引名的一部分。 PUT test_index2 { “settings”:{ “number_of_shards” : 2, “number_of_replicas” : 1 } } 解释说明: number_of_shards:主分片数量 number_of_relicas:每个主分片的副本分片数量。

3 修改索引

命令语法:PUT 索引名/_settings{索引配置参数} 注意:索引一旦创建,primary shard数量不可变化,可以改变replica shard数量。 PUT test_index2/_settings { “number_of_replicas” : 2 }

4 删除索引

命令语法:DELETE 索引名1[, 索引名2 …] DELETE test_index1

5 查看索引信息

相当于查看表的信息

代码语言:javascript
复制
GET _cat/indices?v


health  status   index      uuid                      pri  rep   docs.count 
yellow  open   test_index   2PJFQBtzTwOUhcy-QjfYmQ   5    1          0  
docs.deleted       store.size        pri.store.size
          0       460b           460b

5.1 往索引里面存数据(新增Document)

在索引中增加文档。在index中增加document。 Elasticsearch有自动识别机制。如果增加的document对应的index不存在,自动创建index;如果index存在,type不存在,则自动创建type。如果index和type都存在,则使用现有的index和type。

5.1.1PUT语法

此操作为手工指定id的Document新增方式。 语法:PUT 索引名/类型名/唯一ID{字段名:字段值}

代码语言:javascript
复制
put test_index1/test_type/1
{
   "name":"test_doc_01",
   "remark":"first test elastic search",
   "order_no":1
}

以上代码的意思是 插入了一条数据

代码语言:javascript
复制
{
  "_index": "test_index", 新增的document在什么index中,
  "_type": "test_type", 新增的document在index中的哪一个type中。
  "_id": "1", 指定的id是多少
  "_version": 1, document的版本是多少,版本从1开始递增,每次写操作都会+1
  "result": "created", 本次操作的结果,created创建,updated修改,deleted删除
  "_shards": { 分片信息
    "total": 2, 分片数量只提示primary shard
    "successful": 1, 数据document一定只存放在index中的某一个primary shard中
    "failed": 0
  },
  "_seq_no": 0, 执行的序列号
  "_primary_term": 1 词条比对。
}

以上是插入数据之后返回的东西

如果使用PUT语法对同id的Document执行多次操作。是一种覆盖操作(全量替换)。如果需要Elasticsearch辅助检查PUT的Document是否已存在,可以使用强制新增语法。使用强制新增语法时,如果Document的id在Elasticsearch中已存在,则会报错。(version conflict, document already exists)

代码语言:javascript
复制
语法: 
PUT 索引名/类型名/唯一ID/_create{字段名:字段值} 
或 
PUT 索引名/类型名/唯一ID?op_type=create{字段名:字段值}。
代码语言:javascript
复制
PUT test_index/test_type/1/_create
{
   "name":"new_test_doc_01",
   "remark":"first test elastic search",
   "order_no":1
}
5.1.2 POST语法

POST相比Put功能多一个允许主键自动生成方式。 此操作为Elasticsearch自动生成id的新增Document方式。 语法:POST 索引名/类型名{字段名:字段值}

代码语言:javascript
复制
POST test_index/test_type
{
   "name":"test_doc_04",
   "remark":"forth test elastic search",
   "order_no":4
}

post 不仅仅支持明确主键,而且还支持自动生成主键6

5.2 查询Document

5.2.1 GET ID单数据查询

语法:GET 索引名/类型名/唯一ID 如: GET test_index/test_type/1

查询结果是:

代码语言:javascript
复制
{
  "_index" : "test_index1",
  "_type" : "test_type",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "test_doc_01",
    "remark" : "first test elastic search",
    "order_no" : 1
  }
}
5.2.2 GET _mget批量查询
代码语言:javascript
复制
批量查询可以提高查询效率。推荐使用(相对于单数据查询来说)。

语法如下:


GET _mget
{
  "docs" : [
    {
      "_index" : "索引名",
      "_type" : "类型名",
      "_id" : "唯一ID值"
    }, {}, {}
  ]
}


GET 索引名/_mget
{
  "docs" : [
    {
      "_type" : "类型名",
      "_id" : "唯一ID值"
    }, {}, {}
  ]
}


GET 索引名/类型名/_mget
{
  "docs" : [
    {
     "_id" : "唯一ID值"
    },
{
     "_id" : "唯一ID值"
    }
  ]
}
5.2.3 查询全部

查询全部语法 GET 索引名/类型名/_search

5.3 修改Document

5.3.1 替换Document(全量替换)

和新增的PUT语法是一致。

PUT 索引名/类型名/唯一ID{字段名:字段值}

本操作相当于覆盖操作。全量替换的过程中,Elasticsearch不会真的修改Document中的数据,而是标记Elasticsearch中原有的Document为deleted状态,再创建一个新的Document来存储数据,当Elasticsearch中的数据量过大时,Elasticsearch后台回收deleted状态的Document。

5.3.1 更新Document(partial update)

语法:POST 索引名/类型名/唯一ID/_update{doc:{字段名:字段值}}

只更新某Document中的部分字段。这种更新方式也是标记原有数据为deleted状态,创建一个新的Document数据,将新的字段和未更新的原有字段组成这个新的Document,并创建。对比全量替换而言,只是操作上的方便,在底层执行上几乎没有区别。

代码语言:javascript
复制
POST test_index/test_type/1/_update
{
   "doc":{
      "name":" test_doc_01_for_update"
   }
}

5.4 删除Document

Elasticsearch中执行删除操作时,Elasticsearch先标记Document为deleted状态,而不是直接物理删除。当Elasticsearch存储空间不足或工作空闲时,才会执行物理删除操作。标记为deleted状态的数据不会被查询搜索到。

语法:DELETE 索引名/类型名/唯一ID

代码语言:javascript
复制
DELETE     test_index/test_type/1

6 bulk批量增删改(重点记忆)

使用bulk语法执行批量增删改。语法格式如下:

注意:_bulk的两个{}都不要出现换行等操作,两个{}使用回车符进行识别。

POST _bulk { “action_type” : { “metadata_name” : “metadata_value” } } { document datas | action datas }

语法中的action_type可选值为: create : 强制创建,相当于PUT 索引名/类型名/唯一ID/_create。主键必须有。 index: 普通的POST操作,相当于创建Document或全量替换 update: 更新操作(partial update),相当于 POST 索引名/类型名/唯一ID/_update delete: 删除操作

6.1 新增数据

代码语言:javascript
复制
新增数据:
POST _bulk
{ "create" : { "_index" : "test_index" , "_type" : "test_type", "_id" : "1" } }
{ "field_name" : "field value" }

6.2 PUT操作新增或全量替换

代码语言:javascript
复制
PUT操作新增或全量替换
POST _bulk
{ "index" : { "_index" : "test_index", "_type" : "test_type" , "_id" : "2" } }
{ "field_name" : "field value 2" }

6.3 POST更新数据

代码语言:javascript
复制
POST _bulk
{ "update" : { "_index" : "test_index", "_type" : "test_type" , "_id" : 2, "_retry_on_conflict" : 3 } }
{ "doc" : { "field_name" : "partial update field value" } }

6.4 DELETE删除数据

代码语言:javascript
复制
POST _bulk
{ "delete" : { "_index" : "test_index", "_type" : "test_type", "_id" : "2" } }

6.5 批量写操作

代码语言:javascript
复制
POST _bulk
{ "create" : { "_index" : "test_index" , "_type" : "test_type", "_id" : "10" } }
{ "field_name" : "field value" }
{ "index" : { "_index" : "test_index", "_type" : "test_type" , "_id" : "20" } }
{ "field_name" : "field value 2" }
{ "update" : { "_index" : "test_index", "_type" : "test_type" , "_id" : 20,
 "_retry_on_conflict" : 3 } }
{ "doc" : { "field_name" : "partial update field value" } }
{ "delete" : { "_index" : "test_index", "_type" : "test_type", "_id" : "2" } }
代码语言:javascript
复制
注意:
bulk语法中要求一个完整的json串不能有换行。不同的json串必须使用换行分隔。
多个操作中,如果有错误情况,不会影响到其他的操作,只会在批量操作返回结果中标记失败。
bulk语法批量操作时,bulk request会一次性加载到内存中,如果请求数据量太大,
性能反而下降(内存压力过高),需要反复尝试一个最佳的bulk request size。
一般从1000~5000条数据开始尝试,逐渐增加。如果查看bulk request size的话,
一般是5~15MB之间为好。


bulk语法要求json格式是为了对内存的方便管理,和尽可能降低内存的压力。
如果json格式没有特殊的限制,Elasticsearch在解释bulk请求时,需要对任意格式的json进行解释处理,
需要对bulk请求数据做json对象会json array对象的转化,那么内存的占用量至少翻倍,
当请求量过大的时候,对内存的压力会直线上升,且需要jvm gc进程对垃圾数据做频繁回收,
影响Elasticsearch效率。
生产环境中,bulk api常用。


都是使用java代码实现循环操作。一般一次bulk请求,执行一种操作。如:批量新增10000条数据等。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Kibana
  • 支持的命令
    • 1 GET _cat/health?v
      • 2 创建索引
        • 2.1创建索引时指定分片
      • 3 修改索引
        • 4 删除索引
          • 5 查看索引信息
            • 5.1 往索引里面存数据(新增Document)
            • 5.2 查询Document
            • 5.3 修改Document
            • 5.4 删除Document
          • 6 bulk批量增删改(重点记忆)
            • 6.1 新增数据
            • 6.2 PUT操作新增或全量替换
            • 6.3 POST更新数据
            • 6.4 DELETE删除数据
            • 6.5 批量写操作
        相关产品与服务
        Elasticsearch Service
        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档