欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用kibana操作ES

程序员文章站 2022-07-06 09:42:38
...

使用kibana操作ES
# GET:获取(查询)
# PUT:存放(新增)
# POST:增加(新增)
# DELETE:删除(删除)
# _update:更新(并不是一个关键字)
# _all:不允许使用(在6.x已经废弃了)
# 查看ES的状态
GET _cat/health
# 查看带表头的健康状态
GET _cat/health?v
# 查看集群中节点的状态信息
GET _cat/nodes
# 查看带表头的节点状态信息
GET _cat/nodes?v
# ES中之前有三大核心(Index,Type,Document)
# 虽然Type6.x版本已经不推荐使用了,但是并没有废弃还可以继续使用
# 查看Index的信息
GET _cat/indices
# 查看带表头的Index的信息
GET _cat/indices?v
# 创建Index
# 创建Index的命令只能用PUT,不能使用POST
# 语法规则: PUT /index的名称
# 是否创建成功会返回一个数据acknowledged—>如果是true,说明创建成功
# 会出现一个警告信息,但是不影响使用,告诉咱们在ES7.x版本之后,这个分区数据就从5变成1
# 在7.x版本之前使用的分区都是5
# 如果是常规创建,则不需要修改
PUT /test_index1
#创建type
# 有些公司还在使用,虽然在6.x中已经被废弃了(但是仍然可以使用)(废弃就相当于不推荐使用,但是没有被废除)
# 关于创建type有两种模式(PUT,POST),本质上没有任何的区别,只是创建出来的格式会发生变化
# 当使用PUT进行创建type的时候,可以自定义格式
# 当使用POST进行创建type的时候,必须要按照ES所提供的格式来进行创建
# PUT创建的语法规则:
# PUT /index名称(这个index一定不能存在) 创建type的语法
# 也就是说当创建type的时候,必须要先创建index,如果index已经存在了,则直接会抛出异常,告诉index已经存在了(所以一个type只能对应一个index,也就是说一个index下面只能有一个type)
# ES中是没有String类型的,所有String类型全部都是text类型
# ES中也没有int类型,只能Integer类型

	PUT /test_index2
	{
	  "mappings": {
	    "test_type1": {
	      "properties": {
	        "username" : {"type": "text"},
	        "password" : {"type" : "text"},
	        "age" : {"type" : "integer"}
	      }
	    }
	  }
	}

使用POST进行创建
	# 语法规则:POST /index的名称(也不能存在)/type的名称{定义type的属性}
	
	POST /test_index3/test_type1
	{
	  "properties" : {
	    "username" : {"type" : "text"},
	    "salary" : {"type" : "double"},
	    "age" : {"type" : "integer"}
	  }
	}
	
	
	# 在这你一定得记明白,当使用POST来进行创建type的时候,所有的type字段的类型全部都不会生效,也就是说ES默认全部转换为text类型(也就是java中的String类型)
	# 因为向ES的搜索库中所保存的数据有可能是double,有integer,有可能是long...,这么一来存储起来就比较麻烦,所以ES都会默认全部给你转换成String类型,然后进行存储,因为String这个类型是万能的
	# 查询type
	# 语法规则: GET /index的名称/_mapping/type的名称
	GET /test_index4/_mapping/test_type5

	# 实现ES中document的增删改查
	# 向ES的type中添加一条数据
	# 也有两种方式(POST, PUT)
	# 当使用PUT来进行添加数据的时候,ES不会自动分配唯一索引(相当于数据库中的主键),需要你自己手动指定
	# 语法规则: PUT /index的名称/type的名称/唯一索引的值{所需要添加的数据}
	
	PUT /test_index2/test_type1/123456
	{
	  "username" : "zhangsan",
	  "password" : "123456",
	  "age" : 17
	}
	
	# 使用POST来进行创建
	# 语法规则: POST /index的名称/type的名称{所需要添加的数据}
	# 也就是说当使用POST来进行添加数据的时候,不再需要自己编写id的值,由ES来进行自动分配(相当于在mysql数据库中设置了自增主键),但是ES中所使用的这个id值是UUID
	
	# 43tYA3IBSGprRY6VtTHL
	POST /test_index3/test_type1
	{
	  "username" : "lisi",
	  "salary" : 2000.3,
	  "age" : 18
	}
	
	# 因为在关系型数据库中,使用insert的sql语句向某一张不存在的表添加数据的时候,会报错,但是在ES中是否会报错呢?不会报错
	# ES比较奇怪,当去插入一条数据的时候,如果index和type不存在,ES会自动给你按照你添加数据的格式创建index和type以及type中的类型
	# 5HteA3IBSGprRY6VkzEr
	# 这里是有利有弊的,之前在这我就被坑了一次
	# 方便于程序员了,在使用java的时候不再需要创建type了(我觉得是弊大于利)
	POST /test_index4/test_type6
	{
	  "goods_name" : "手机",
	  "goods_price" : 4501.6,
	  "goods_type" : "手机",
	  "goods_description" : "简单描述"
	}

	# 查询document
	# 语法规则: GET /index的名称/type的名称/id
	# 相当于 select * from xxx where id = ?
	GET /test_index2/test_type1/123456
	# 只显示source中的数据
	GET /test_index3/test_type1/43tYA3IBSGprRY6VtTHL/_source

	# 删除某个type中的数据
	# 语法规则:DELETE /index的名称/type的名称/id
	DELETE /test_index2/test_type1/123456

	# 修改某个document数据
	# 修改的时候必须要使用POST关键字,不能使用PUT,而且还需要使用_update来进行配合
	# 语法规则: POST /index的名称/type的名称/id{修改的数据}
	
	POST /test_index3/test_type1/43tYA3IBSGprRY6VtTHL/_update
	{
	  "doc": {
	    "username" : "wangwu",
	    "salary" : 3000
	  }
	}

	GET _search
	{
	  "query": {
	    "match_all": {}
	  }
	}