[ELK] Elasticsearch的数据查询、创建、删除与更新 by curl

假设ELK(版本:7.6.0)已经搭好了,接下来就是怎么增删改查数据了,本文主要以官方的kibana_sample_data_logs+curl进行讲解,postman、kibana(dev tool)稍后更新。

注:暂时只是笔记,还有许多待完善待地方,完善后再添加示例代码


from Elasticsearch实战

查询 - GET

基本查询

查询所有index

具体参数

# 查询当前节点的所有index
curl -XGET 'http://localhost:9200/_cat/indices?v
# 查询当前节点所有index的mapping
curl -XGET 'http://localhost:9200/_mapping'
  • 如果没有XGET默认就是XGET
  • 如果没有http://默认走http
  • ?v表示列出表头

查询特定index

基本信息

# 查询所有信息
curl 'localhost:9200/IndexName'
# 查询mapping(type信息)
curl 'localhost:9200/IndexName/_mapping'
# 查询setting
curl 'localhost:9200/IndexName/_settings'
  • _mapping结果解析
    • type:字段类型
      • 核心:字符串(string)、数值(byte、short、int、long、float、double)、日期(date)、布尔(boolean)
      • 数组和多元字段:数组(所有核心类型都支持数组,定义后可单一也可数组)
      • 预定义(以_开头)
        • 控制如何存储和搜索文档:_source(在索引文档的时候,存储原始的JSON文档)、_all(将所有的字段一起索引)
        • 唯一识别文档:_uid、_id、_type、_index
        • 为文档增加新的属性:_size(索引原始JSON内容的大小)、_timestamp(索引文档索引的事件时间)
        • 控制文档路由到哪些分片:_routing、_parent
    • index:搜索设置
      • analyzed:默认,字符串转小写->将字符串分解为单词->和搜索条件匹配
      • not_analyzed:整个字符串作为单独的词条进行索引
      • no:不被搜索到

所有数据

# 查询特定index的所有数据
curl 'localhost:9200/IndexName/_search?pretty'

结果解析1
结果解析2

特定document

# 无筛选条件
curl 'localhost:9200/IndexName/TypeName/ID?pretty'
# 含筛选条件
curl 'localhost:9200/IndexName/TypeName/ID?pretty&q=QueryContent'

特定document的特定field

# 单个field
curl 'localhost:9200/IndexName/TypeName/ID?_source=Field&pretty'
# 多个field
curl 'localhost:9200/IndexName/TypeName/ID?_source=Field1,Field2&pretty'

创建 - PUT

创建document

curl -XPUT 'localhost:9200/IndexName/TypeName/ID' -d '{"Field1":"Field1Value","Field2":"Field2Value"}

如果IndexName不存在,会自动创建index、type

创建Index

curl -XPUT 'localhost:9200/IndexName'

删除 - DELETE

删除document

通过ID - 单个

# 通过id只能一次删除一个
curl -XDELETE 'localhost:9200/IndexName/TypeName/ID'

返回"result": "deleted"

若ID不存在则返回"result": "not_found"

通过条件 - 单个或多个

curl -XPOST 'localhost:9200/IndexName/TypeName/_delete_by_query' -d 
'{
	"query":{
		# query_content
	}
}'

query_content包括term、match、match_all、range

  • term - 单条件

    "term": {"Field": "Value"}
    

    注:term只支持单条件

  • match

  • https://www.jianshu.com/p/60a6ad164035待完善

删除index

# 单个
curl -XDELETE 'localhost:9200/IndexName'
# 多个
curl -XDELETE 'localhost:9200/IndexName1,IndexName2'
# 所有 !!慎用!!
curl -XDELETE 'localhost:9200/_all'

返回"acknowledged": true

关闭index

关闭index后,es无法读取和写入其中的数据,直到再次打开它

# 关闭
curl -XPOST 'localhost:9200/IndexName/_close'
# 开启
curl -XPOST 'localhost:9200/IndexName/_open'

更新 - POST

更新document的字段值

原数据存在

curl -XPOST 'localhost:9200/IndexName/TypeName/ID/_update' -d 
'{
	"doc":{
				"Field1": "Value",
				"Field2": "Value"
				}
	#,"detect_noop": false
}'

返回"result": "updated"

detect_noop:默认true,表示原来的source和新的source存在不同的字段情况下才会重建索引,否则不会(返回"result": "noop",version不变);false表示不管内容有没有发生变化都会重建索引(version+1)

注:postman中,-d后的内容写入body->raw->json

原数据不存在

curl -XPOST 'localhost:9200/IndexName/TypeName/ID_unexist/_update' -d 
'{
	"doc":{
			"Field1": "Value",
			"Field2": "Value"
			},
	"upsert":{
			"FieldA": "Value",
			"FieldB": "Value"
			}
}'

返回"result": "created"

若ID存在,走doc,否则插入upsert的内容

更新冲突

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章