假設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的內容