zoukankan      html  css  js  c++  java
  • es7.+(一)检索

    1.初步检索

    1.1_cat

    GET /_cat/nodes: 查看所有节点
    GET /_cat/health:查看es健康状况
    GET /_cat/master:查看主节点信息
    GET /_cat/indices:查看所有索引相当于mysql的showdatabase

    1.2索引一个文档(保存)

    保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
    PUT customer/external/1 :在customer索引下的external类型下保存1号数据为

        {
            "name": "JSON Doe"
        }
    
    • 获取结果
      带"_"都称为元数据
    {
        "_index": "customer",//数据在哪个索引下
        "_type": "external",//在哪个类型下
        "_id": "1",//数据的id
        "_version": 2,//数据的版本,每更新一次版本都会升级
        "result": "created"//新建    //第二次是为"updated",
        "_shards": { //分片
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 1,
        "_primary_term": 2
    }
    

    其实这个请求还支持使用POST方式发送,路径和上面一样的时候结果一致,

    POST可以不带ID发送(不带最后的 /1),ES会自动生成一个ID,如果再次请求也会再次新增一个ID

    PUT方式如果不带ID将会出现405错误:请求方式不允许PUT 必须带id

    1.3查询文档

    GET customer/external/1

    {
        "_index": "customer", //在哪个索引
        "_type": "external", //在哪个类型
        "_id": "1",  //记录id
        "_version": 2,  //版本号
        "_seq_no": 1,  //并发控制字段,每次更新就会+1,用来做乐观锁
        "_primary_term": 2,  //同上,主分片重新分配,如重启,就会变化
        "found": true,
        "_source": {
            "name": "jack"
        }
    }
    更新携带 ?if_seq_no=0&if_primary_term=1  乐观锁机制
    

    1.4乐观锁演示

    两个put语句后面都跟上?if_seq_noi=1&if_primary_term=1
    并发控制号(seq_noi=1)

    当第一个修改后seq_no变为2,那么另外一个就不能更新了

    第二个更新就报错

    相当于mysql的乐观锁操作

    1.5更新文档

    带_update

    使用后缀_update明确表明这是一个文档更新命令
    POST customer/external/1/_update

    {
      "doc":{
        "name":"John Doew"
      }
    }
    

    如果更新数据和上次的一模一样那么不会更新数据的版本号,序列号,result也会显示“noop”

    不带_update

    POST customer/external/1

    {
      "name":"john Doe2"
    }
    

    或者
    PUT customer/external/1

    PUT和POST(不带_update)都会直接更新数据,版本号序列号都会发生改变

    1.6删除文档&索引

    DELETE customer/external/1 //删除文档
    DELETE customer //删除索引

    es没有提供类型(type)的删除,如果要删除只能删除整个index,所以7+版本将type弃用了

    1.7bulk批量API

    POST customer/external/_bulk

    {"index":{"_id":"1"}}
    {"name": "JSON Doe"}
    {"index":{"_id":"2"}}
    {"name": "Jone Doe"}
    
    • 语法格式
      两行为一个整体
      {action:{metadata}}//指定操作类型和id
      {requestbody} //内容

    • 复杂实例

    POST /_bulk
    //删除
    {"delete":{"_index":"website","_type":"blog","_id":"123"}}
    
    //创建
    {"create":{"_index":"website","_type":"blog","id":"123"}}
    {"title": "My first blog post"}
    
    //保存
    {"index": {"_index":"website","_type":"blog"}}
    {"title": "My second blog post"}
    
    //更新
    {"update":{"_index":"website","_type":"blog","_id":"123"}}
    {"doc":{"title":"My updated blog post"}}
    

    批量操作中的每一个操作相互独立,可以独立成功或失败,彼此没有影响。

  • 相关阅读:
    关于feign调用请求头丢失分析
    并发下编写SQL的注意事项
    Sentinel降级规则整理
    Mybatis-Plus使用整理
    Docker各种零散命令整理
    set集合怎么保证不重复的
    idea启动项目ava heap space
    网络穿透工具--钉钉HTTP穿透
    Log4j基本使用
    ide中普通java程序打包
  • 原文地址:https://www.cnblogs.com/psyduck/p/14470633.html
Copyright © 2011-2022 走看看