ES集羣基本操作
1、集羣狀態分類
查看集羣健康狀態
GET _cluster/health
***
{
"cluster_name" : "elasticsearch",
"status" : "green",//green:健康,yellow:有不可用的節點,red:集羣不可用
"timed_out" : false,
"number_of_nodes" : 1,//節點數
"number_of_data_nodes" : 1,//數據節點數
"active_primary_shards" : 3,//活躍的主分片
"active_shards" : 3,//總分片數
"relocating_shards" : 0,//?
"initializing_shards" : 0,//?
"unassigned_shards" : 0,//?
"delayed_unassigned_shards" : 0,//?
"number_of_pending_tasks" : 0,//?
"number_of_in_flight_fetch" : 0,//?
"task_max_waiting_in_queue_millis" : 0,//?
"active_shards_percent_as_number" : 100.0//?
}
***
查看集羣狀態,並顯示列名
GET _cat/nodes?v
***
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 13 69 2 dilm * 3RZNX97CW39V6PU
heap.percent:?
ram.percent:?
***
查看分片
GET _cat/shards
cat命令集合
***
/_cat/allocation #查看單節點的shard分配整體情況
/_cat/shards #查看各shard的詳細情況
/_cat/shards/{index} #查看指定分片的詳細情況
/_cat/master #查看master節點信息
/_cat/nodes #查看所有節點信息
/_cat/indices #查看集羣中所有index的詳細信息
/_cat/indices/{index} #查看集羣中指定index的詳細信息
/_cat/segments #查看各index的segment詳細信息,包括segment名, 所屬shard, 內存(磁盤)佔用大小, 是否刷盤
/_cat/segments/{index}#查看指定index的segment詳細信息
/_cat/count #查看當前集羣的doc數量
/_cat/count/{index} #查看指定索引的doc數量
/_cat/recovery #查看集羣內每個shard的recovery過程.調整replica。
/_cat/recovery/{index}#查看指定索引shard的recovery過程
/_cat/health #查看集羣當前狀態:紅、黃、綠
/_cat/pending_tasks #查看當前集羣的pending task
/_cat/aliases #查看集羣中所有alias信息,路由配置等
/_cat/aliases/{alias} #查看指定索引的alias信息
/_cat/thread_pool #查看集羣各節點內部不同類型的threadpool的統計信息,
/_cat/plugins #查看集羣各個節點上的plugin信息
/_cat/fielddata #查看當前集羣各個節點的fielddata內存使用情況
/_cat/fielddata/{fields} #查看指定field的內存使用情況,裏面傳field屬性對應的值
/_cat/nodeattrs #查看單節點的自定義屬性
/_cat/repositories #輸出集羣中註冊快照存儲庫
/_cat/templates #輸出當前正在存在的模板信息
***
2、集羣狀態監控
1)集羣狀態
2)集羣統計
3)集羣任務管理
4)節點信息
5)活躍線程信息
3、集羣備份
ES索引基本操作
1、創建一個索引
1)創建也給索引並指定類型
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}
2)_create方式創建索引
PUT songjn_index/_create/1
{"name":"songjn","age":"17"}
3)_doc方式創建索引
PUT songjn_index/_doc/1
{"name":"songjn","age":"18"}
說明:創建有兩種方式
①如果創建的過程沒有指定索引Field的類型,就會分配固定類型
②_create:當利用_create關鍵字進行文檔創建的時候,如果該文檔存在同一ID則報錯
③_doc:當利用_doc關鍵字進行文檔創建的時候,如果該文檔存在則進行刪除並新增,版本號+1
2、get一個索引規則
GET songjn_index
3、刪除索引
Delete 索引名稱
Delete 索引名稱1,索引名稱2
Delete 索引名稱*
Delete _all
注意事項:對數據安全來說,能夠使用單個命令來刪除所有的數據可能會帶來很可怕的後果,所以,爲了避免大量刪除,
可以在elasticsearch.yml 配置文件中修改 action.destructive_requires_name: true
設置之後只限於使用特定名稱來刪除索引,使用_all 或者通配符來刪除索引無效(上述中說明配置文件中禁止後此方式不能使用)】
4、修改索引
1)索引數據遷移
- reindex
- 第三方工具
2)修改副本數
- 注意:索引一旦創建後,主分片數不能再修改
3)索引壓縮
- shrink
ES文檔基本操作
1、新增文檔
1)單個文檔寫入
①_create方式創建索引 PUT songjn_index/_create/1 {"name":"songjn","age":"17"} ②_doc方式創建索引 PUT songjn_index/_doc/1 {"name":"songjn","age":"18"} 說明:創建有兩種方式 ①如果創建的過程沒有指定索引Field的類型,就會分配固定類型 ②_create:當利用_create關鍵字進行文檔創建的時候,如果該文檔存在同一ID則報錯 ③_doc:當利用_doc關鍵字進行文檔創建的時候,如果該文檔存在則進行刪除並新增,版本號+1
2)批量寫入
Bulk API
- 支持在一次API調用中,對不同索引進行不同的操作
- 支持的操作類型:Index、Create、Update、Delete
- 操作中,單條失敗不會影響其他操作
POST _bulk {"index":{"_index":"songjn_index","_id":"1"}} {"name":"songjianan"} {"delete":{"_index":"songjn_index","_id":"4"}}
3)第三方導入
- logstash
- flume
- kafka
2、刪除文檔
①根據主鍵刪除數據 Delete 索引名稱/文檔名稱/主鍵編號 ②根據匹配條件刪除數據 POST 索引名稱/文檔名稱/_delete_by_query { "query":{ "term":{ "_id":100000100 } } } ③刪除所有數據:(注意請求方式是Post,只刪除數據,不刪除表結構) POST /testindex/testtype/_delete_by_query?pretty { "query": { "match_all": { } } }
3、查詢文檔
1)單個文檔查詢
//①根據ID查詢 GET songjn_index/_doc/1 //②根據條件匹配 GET bank/_search { "query": { "match": { "age": 30 } } }
2)批量檢索
批量讀取-mget
GET _mget
{ "docs":[ { "_index":"songjn_index", "_id":"1" }, { "_index":"test2", "_id":"1" } ] }
批量查詢-msearch
3)分頁檢索
GET bank/_search { "query": { "match": { "age": 30 } }, "from": 0, "size": 10 }
5)排序
GET bank/_search { "from": 0, "size": 10, "query": { "match": { "age": 30 } }, "sort": [ { "account_number": { "order": "asc" } } ] }
4、修改文檔
1)單個文檔修改
1)post直接更新 POST songjn_index/_doc/2 {"name":"songjn_haha"} 2)put直接更新 PUT songjn_index/_doc/2 {"name":"songjn_haha","age":"18"} 說明:1)2)更新的時候字段要寫全,否則其他屬性會被更新成空 3)更新最新語法,可以更新部分字段,不會丟失其他字段的值 POST songjn_index/_update/2 { "doc": { "name":"songjn_haha33" } }
2)批量修改
Bulk API(同上)
5、高亮顯示
GET bank/_search { "query": { "match": { "lastname": "Nieves" } }, "highlight": { "pre_tags": "<span class='key' style='color:red'>", "post_tags": "</span>", "fields": { "lastname": {} } } } ///注意match中的屬性需要和高亮中fields屬性相同
6、推薦
7、分詞
8、同義詞
9、調試,profile:顯示查詢類型等詳細信息
GET bank/_search { "query": { "match": { "age": 30 } }, "profile": "true" }
10、常見錯誤