【死磕ES】四、基本操作

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、常見錯誤

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