Elasticsearch学习笔记(四):ElasticSearch的基本命令

195 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

导语

Elasticsearch 是一个分布式的开源搜索和分析引擎,目前被广泛使用,本文记录Elasticsearch中一些基本的操作命令。

ES的索引操作命令

接下来,介绍三个基本的命令,

查看ES集群中的索引

查看ES集群中有哪些索引,使用GET /_cat/indices?v,可以看到目前的一些索引及状态信息。

health status index                        uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   kibana_sample_data_ecommerce qLuaqhGVTDyYjPSB_2G4yg   1   0       4675            0      4.6mb          4.6mb
green  open   .kibana_task_manager_1       1OvNa3hZS2yPVIafy0bmIQ   1   0          2            4     53.4kb         53.4kb
green  open   .apm-agent-configuration     StpgiJZKS2W4Wg4J5G3B7A   1   0          0            0       283b           283b
green  open   .kibana_1                    Wp9uiUCYTYKZ_je7udfmIQ   1   0         53            0    960.3kb        960.3kb

可以看到,这里有四个索引,其中以.开头的3个是系统自带的,另外一个sample data则是在第一次进入Kibana时导入的示例数据。这里四个索引都是green状态。

创建新的索引

创建索引的命令,使用PUT /test_index,执行后返回结果如下:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test_index"
}

执行完成后,我们可以在运行一下最开始查询索引的命令来看一下这个索引有没有显示出来。以及集群的状态命令,可以看到这里显示状态变成了yellow,这里比较奇怪。为什么之前的都是green状态,而新建的这个索引则是yellow状态。这是因为我们只有一个节点node,而这里新建索引建立了一个primary shard和一个replic shard。由于前面要求replica shard不能和primary shard在同一个node上,所以这里的replica shard就不是active状态的,所以按之前说的,primary正常,部分replica异常就是yellow状态。

删除索引

删除索引DELETE/test_index,删除后也可以再使用上面两条命令查看是否删除成功。

{
  "acknowledged" : true
}

可以看到,删除完成后,状态又变回了green

ES的文档操作命令

这里主要介绍基本的增删改查操作。

新增员工(文档)

有两种简单的新增文档的方式,一种是指定ID,另一种是不指定ID,这里举一个例子。假如我们新增一个员工的文档到company这个index中,

PUT /company/_doc/1
{    
    "name" : "Jack",    
    "age" :  33,    
    "gender""male",    
    "join_date""2012-01-01"
}

这里,我们在/_doc/后设置了id=1,如果不进行设置,ES将会自动为其分配一个很长的字符串作为它的ID。

查询员工(文档)

可以指定ID的方式来进行文档查询。

GET /company/_doc/1

得到返回结果为:

{
  "_index" : "company",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "Jack",
    "age" : 33,
    "gender" : "male",
    "join_date" : "2012-01-01"
  }
}

修改员工(文档)

通过指定ID的方式进行修改,命令如下:

PUT /company/_doc/1

{
    "name" : "Jack",
    "age" :  24,
    "gender""male",
    "join_date""2012-01-01"
}

也可以只包含部分字段来进行部分字段的更新。

删除员工(文档)

删除文档时,也需要指定文档ID,其命令示例如下:

DELETE /company/_doc/1

批量查询

可以使用mget命令进行多个id的批次查询,例如

POST /company/_mget
{
  "ids": ["1", "2"]
}

批量操作

除了批量查询之外,也可以进行批量的其他操作。这里需要使用_bulk命令。

命令模板如下:

POST /index/_bulk
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n

bulk的请求模板分成action、metadata和request body三部分。action必须是以下4种选项之一

  • index : 如果文档不存在就创建,如果文档存在就更新
  • create : 如果文档不存在就创建,但如果文档存在就返回错误
  • update : 更新一个文档,如果文档不存在就返回错误,使用时要给_id值
  • delete : 删除一个文档,如果要删除的文档id不存在,就返回错误

例如:批量添加数据

POST /company/_bulk
{"create":{"_index":"company","_id": 0}}
{"name":"Bob","age": 19,"hobby": "rap"}
{"create":{"_index":"company","_id": 1}}
{"name":"Tom","age": 20,"hobby": "football basketball sing"}
{"create":{"_index":"company","_id": 2}}
{"name":"Jack","age":30,"hobby": "basketball tennis sing"}
{"create":{"_index":"company","_id": 3}}
{"name":"Amy","age": 25,"hobby": "dance sing rap"}