ElasticSearch的CRUD

文章目录

  • ElasticSearch的crud
    • Create一个文档
    • Get一个文档
    • index文档
    • update文档
  • Bulk API
  • 批量读取 mget
  • 批量查询 msearch
  • 常见错误返回

ElasticSearch的crud

操作 语法
index PUT my_index/_doc/1 {“user”:“mike”,“comment”:“You know,for search”}
create PUT my_index/create/1 {“user”:“mike”,“comment”:“You know,for search”}
POST my_index/doc(不指定id,自动生成) {“user”:“mike”,“comment”:“You know,for search”}
read GET my_index/_doc/1
update POST my_index/_update/1 {“doc”: {“user”:“mike”,“comment”:“You know,Elasticsearch”} }
delete DELETE my_index/_doc/1
  • Type名,7.0以后约定都用_doc

  • create 与 index的区别:

    • create:如果ID已经存在,会失败
    • index:如果ID不存在,创建新的文档。否则,先删除现有的文档,在创建新的文档,版本号会增加
  • update 文档必须已经存在,更新只会对相应的字段做增量修改

  • Create一个文档

    • 支持自动生成文档id和指定文档id两种方式 主要是HTTP请求方法的不同

      • 指定id:

        PUT user/_create/1
        {
            "firstName":"Jack",
            "lastName":"Jonson",
            "tag":["guitar","skateboard"]
        }
        

        如果id已经存在,会报错,create失败

      • 自动生成id:

        POST user/_create/_doc
        {
            "firstName":"Jack2",
            "lastName":"Jonson2",
            "tag":["guitar2","skateboard2"]
        }
        
  • Get一个文档

    GET user/_doc/1
    
    • 找到文档,返回HTTP200

      {
        "_index" : "user",
        "_type" : "_doc",
        "_id" : "1",
        "_version" : 1,
        "_seq_no" : 0,
        "_primary_term" : 1,
        "found" : true,
        "_source" : {
          "firstName" : "Jack",
          "lastName" : "Jonson",
          "tag" : [
            "guitar",
            "skateboard"
          ]
        }
      }
      
    • 找不到文档,返回HTTP404

      {
        "_index" : "user",
        "_type" : "_doc",
        "_id" : "2",
        "found" : false
      }
      
  • index文档

    PUT user/_doc
    {
    	"user":"Mike"
    }
    

    原文档为

    {
        "firstName" : "Jack",
        "lastName" : "Jonson",
        "tag" : [
          "guitar",
          "skateboard"
        ]
      }
    

    将会替换成:

    {
        "user" : "mike"
     }
    
    • index和create都是创建新文档,不同点在于:

      index如果文档不存在,就创建新的文档,如果存在,则原文档删除,索引新文档,_version+1

    • index和update的区别:

      • index是先删除,再插入
      • update是更新
      • update可以更新某个字段,其他字段保留,
      • index如果只index一个字段,原文档的其他字段将不被保留
  • update文档

    • update文档不会删除原文档,而是实现真正数据的更新

      POST user/_update/1
      {
          "doc":{
              "tag":["basketball"]
          }
      }
      

Bulk API

  • 支持在一次API调用中,对不同索引进行操作 / 对索引进行不同的操作
  • 支持四种操作类型
    • Index
    • Create
    • Update
    • Delete
  • 可以在URI中指定Index,也可以在请求的结构体中进行
  • 操作中的单挑操作失败,并不会影响其他操作
  • 返回结果包括了每一条操作执行的结果
POST _bulk
{"index":{"_index":"test","_id":"1"}}
{"field1":"value1"}   # index一个新文档,指定索引为test,id为1
{"delete":{"_index":"test","_id":"2"}} # 删除index为test,id为2的文档
{"create":{"_index":"test2","_id":"3"}}
{"field1":"value3"}   # create一个新文档,指定索引为test2,id为3
{"update":{"_index":"test","_id":"1"}}  # update test索引 id为1的文档
{"doc":{"field2":"value2"}}

执行第一次:
ElasticSearch的CRUD_第1张图片
执行第2次:
ElasticSearch的CRUD_第2张图片

批量读取 mget

批量操作,可以减少网络连接所产生的开销,提高性能

GET _mget
{
    "docs":[
        {
            "_index":"user",
            "_id":1
        },
        {
            "_index":"movies",
            "_id":1
        }
    ]
}

批量查询 msearch

POST user/_msearch
{}										# URI指定了index这里需要{}
{"query":{"match_all":{}},"size":1}
{"index":"movies"}
{"query":{"match_all":{}},"size":2}


POST _msearch
{"index":"user"}
{"query":{"match_all":{}},"size":1}
{"index":"movies"}
{"query":{"match_all":{}},"size":2}

常见错误返回

问题 原因
无法连接 网络故障或集群挂了
连接无法关闭 网络故障或节点出错
429 集群过于繁忙
4XX 请求体格式有误
500 集群内部错误

其实就和HTTP返回码的含义差不多

你可能感兴趣的:(ElasticSearch)