Elasticsearch 文档的基本操作

前言

在了解了 Elasticsearch 的基本概念之后,下一步就是操作 ES 的文档了,毕竟数据还是以文档的方式存在 ES 里面。下面主要会介绍文档的 CRUD 操作、文档的元信息、批量写入和读取。

文档 CRUD

包括五个常用的操作 Index、Create、Read、Update、Delete,可以在下表中可以看到相关的命令,7.0中Type都约定用 _doc

操作命令
IndexPUT my_index/_doc/1 {“user”:“mike”, “comment”:“You know, for search”}
CreatePUT my_index/_create/1 {“user”:“mike”, “comment”:“You know, for search”} POST my_index/_doc(如不指定ID,自动生成) {“user”:“mike”, “comment”:“You know, for search”}
ReadGET my_index/_doc/1
UpdatePOST my_index/_update/1 {“doc”:{“user”:“mike”, “comment”:“You know, Elasticsearch”}}
DeleteDELETE my_index/_doc/1
  1. Create 文档:如果文档ID已经存在,会创建失败。支持自动生成文档ID和指定文档ID两种方式:使用 “POST /users/_doc”,系统会自动生成文档ID;使用 “PUT user/_create/1”,需要显示指定_create,如果该文档ID存在,就会操作失败。

    //自动生成 ID
    POST users/_doc
    {
      "user" : "Mike",
      "post_date" : "2019-05-15 12:20:39",
      "message" : "trying out Kibana"
    }
    //指定ID,如果ID已存在,就会报错
    POST users/_doc/1?op_type=create
    {
      "user" : "Mike",
      "post_date" : "2019-05-15 12:20:39",
      "message" : "trying out Kibana"
    } 
    
  2. Get 文档:见上表的 Read,读取一个文档。
    GET users/_doc/1
    下面是找到文档的截图,里面包含了文档的元信息和原始信息(_source里面)
    在这里插入图片描述

  3. Index 文档:如果文档ID不存在,创建新的文档,否则,先删除现有文档,再创建新的文档,版本号会增加。

    PUT users/_doc/1
    {
      "user" : "Jack"
    }
    

在这里插入图片描述

  1. Update 文档:文档必须已经存在,更新只会对相应字段做增量修改,而不会删除原来的文档。
    POST users/_update/1
    {
      "doc" : {
        "post_date" : "2021-05-09 12:27:34",
        "message" : "trying out Elaaticsearch"
      }
    }
    
  2. Delete 文档:删除文档
    DELETE users删除整个索引,DELETE users/_doc/1删除ID为1的文档

批量操作(Bulk)

ES 支持在一次 API 调用中,对不同的索引进行操作,支持"Index、Create、Update、Delete"四种类型的操作。如果操作中单条操作失败,并不会影响其他操作,返回的结果包括了每一条操作执行的结果。索引的名称可以在 URI 中指定,也可以放在请求体中再指定,下面两种都是可以的

POST _bulk
{
{"index": {"_index": "test", "_id":"1"}}
{"field1":"value1"}
}
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }

批量读取和查询(mget&msearch)

批量操作可以减少网络连接所产生的开销、提高性能,当然如果批量操作时数据量太大,会造成网络阻塞,反而降低性能。所以,凡事都得有个度,看数据量大小去分批。

  1. mget :
    GET _mget
    {
    	"docs":[
    		{
    			"index":"user",
    			"_id":1
    		},
    		{
    			"index":"comment",
    			"_id":1
    		},
    	]
    }
    
  2. msearch:
    POST users/_msearch
    {}
    {"query":{"match_all":{}}}
    {}
    {"index":"twitter1"}
    

总结

在文档基本 CRUD 操作上,ES 提供了批量操作的 API,可以减少建立网络连接的开销。单次批量操作数据量不宜过大,以免引发性能问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值