[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的內容

更新衝突

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