elasticsearch索引增删改查命令

  • elasticsearch索引增删改查命令已关闭评论
  • 115,063 views
  • A+
所属分类:elasticsearch

创建索引

现在,我们创建个名为“customer”的索引,其命令为:

curl -XPUT 'localhost:9200/customer?pretty&pretty'

添加完成后,我们查看一下状态,其命令为:

curl -XGET 'localhost:9200/_cat/indices?v&pretty'

得到的response接口如下:

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   customer 95SQ4TSUT7mWBT7VNHH67A   5   1          0            0       260b           260b

第二条命令的结果告诉我们,现在有一个名为customer的索引,它有5个分片和一个副本,其中包含0个文档。

您可能还会注意到,customer索引的健康状态标识为黄色,https://it.baiked.com/elasticsearch/172.html这篇文章我们当时说过状态为绿色的才正常,那么这个为什么是黄色的呢,之所以出现这种情况,这个指标是因为默认情况下创建该索引Elasticsearch的副本。由于我们目前只有一个节点运行,所以在另一个节点加入集群时,还不能分配一个副本(用于高可用性),直到稍后的时间点。一旦该副本被分配到第二个节点,该索引的健康状态将变成绿色。

添加信息

给customer添加个用户信息,其命令如下:

curl -XPUT 'localhost:9200/customer/doc/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
 "name": "John Doe"
}
'

响应值为:

{
  "_index" : "customer",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

从上面,我们看到在customer索引中类型为文档下成功创建了个客户。客户的内部id为1。

现在,让我们根据id查看一下刚才创建的客户信息,命令如下:

curl -XGET 'localhost:9200/customer/doc/1?pretty&pretty'

响应值为:

{
  "_index" : "customer",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : { "name": "John Doe" }
}

这里我们可以看出,通过id和另一个字段,我们就可以获取到一个完整的json文档。

删除索引

现在,我们删除一下刚才创建的索引,命令如下:

curl -XDELETE 'localhost:9200/customer?pretty&pretty'

响应值为:

{
 "acknowledged" : true
}

表明已经删除成功

现在我们再查下索引信息,命令如下:

curl -XGET 'localhost:9200/_cat/indices?v&pretty'

响应值为:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

我们的群集没有任何内容。

覆盖索引

之前我们说过创建索引的命令,那么同样的创建的命令执行两次会是神马情况呢

我们执行两次创建命令如下:

curl -XPUT 'localhost:9200/customer/doc/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
 "name": "John Doe"
}
'

第一次结果如下:

{
 "_index" : "customer",
 "_type" : "doc",
 "_id" : "1",
 "_version" : 1,
 "result" : "created",
 "_shards" : {
 "total" : 2,
 "successful" : 1,
 "failed" : 0
 },
 "_seq_no" : 0,
 "_primary_term" : 1
}

第二次结果如下:

{
 "_index" : "customer",
 "_type" : "doc",
 "_id" : "1",
 "_version" : 2,
 "result" : "updated",
 "_shards" : {
 "total" : 2,
 "successful" : 1,
 "failed" : 0
 },
 "_seq_no" : 1,
 "_primary_term" : 1
}

通过上述我们可以看出,同样的创建命令执行多次,elasticsearch将覆盖上一次的结果

如果我们创建时,不指定id的话,则系统会给随机分配一个id,如下:

curl -XPOST 'localhost:9200/customer/doc?pretty&pretty' -H 'Content-Type: application/json' -d'
 {
 "name": "Jane Doe"
 }
 '
{
 "_index" : "customer",
 "_type" : "doc",
 "_id" : "8OUpmGABmwWPaziMpLuA",
 "_version" : 1,
 "result" : "created",
 "_shards" : {
 "total" : 2,
 "successful" : 1,
 "failed" : 0
 },
 "_seq_no" : 0,
 "_primary_term" : 1
}

更新索引

现在,我们执行以下更新命令看看,如下:

curl -XPOST 'localhost:9200/customer/doc/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
 "doc": { "name": "Jane Doe" }
}
'

返回值跟重复提交的效果一样

我们再执行一条更新命令看看,如下:

curl -XPOST 'localhost:9200/customer/doc/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
 "doc": { "name": "Jane Doe", "age": 20 }
}
'

这次update后,该用户的姓名录入进去了

我们再更改以下年龄大小的命令看看,如下:

curl -XPOST 'localhost:9200/customer/doc/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
 "script" : "ctx._source.age += 5"
}
'

这次我们发现引入了个ctx._source,ctx._source表示更新源文件

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar