【死磕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、常见错误

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