假设ELK(版本:7.6.0)已经搭好了,接下来就是怎么增删改查数据了,本文主要以官方的kibana_sample_data_logs+curl进行讲解,postman、kibana(dev tool)稍后更新。
注:暂时只是笔记,还有许多待完善待地方,完善后再添加示例代码
Elasticsearch的数据查询、创建、删除与更新 by curl
查询 - 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:不被搜索到
- type:字段类型
所有数据
# 查询特定index的所有数据
curl 'localhost:9200/IndexName/_search?pretty'
特定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的内容