ES第四天-简单CRUD

创建索引

PUT /索引名称?pretty

查询索引

GET _cat/indices?v

删除索引

DELETE /索引名称?pretty

插入数据

语法格式:

POST/index名称/type名称/id值
{
    Json数据
}

id值可以不进行指定,如果不指定,将生成一个随机字符串的id
ps:当然,在es7中,弱化了type的概念,因此统一都用“_doc”的type进行表示
例子:
创建product索引下,若干条记录

POST/product/_doc/1
{
    "name" : "xiaomi phone",
    "desc" :  "shouji zhong de zhandouji",
    "price" :  3999,
    "tags": [ "xingjiabi", "fashao", "buka" ]
}
POST/product/_doc/2
{
    "name" : "xiaomi nfc phone",
    "desc" :  "zhichi quangongneng nfc,shouji zhong de jianjiji",
    "price" :  4999,
    "tags": [ "xingjiabi", "fashao", "gongjiaoka" ]
}
 
 
POST/product/_doc/3
{
    "name" : "nfc phone",
    "desc" :  "shouji zhong de hongzhaji",
    "price" :  2999,
    "tags": [ "xingjiabi", "fashao", "menjinka" ]
}
 
POST/product/_doc/4
{
    "name" : "xiaomi erji",
    "desc" :  "erji zhong de huangmenji",
    "price" :  999,
    "tags": [ "low", "bufangshui", "yinzhicha" ]
}
 
POST/product/_doc/5
{
    "name" : "hongmi erji",
    "desc" :  "erji zhong de kendeji",
    "price" :  399,
    "tags": [ "lowbee", "xuhangduan", "zhiliangx" ]
}

还可以这样: create与上面插入的区别就是,如果数据已存在,不会更新,而是报错。

在这里插入图片描述

查询数据

语法

全量搜索

GET /索引名/type类型/_search

id匹配搜索

GET /索引名/type类型/id值

例子

查询product索引下的所有数据

GET /product/_doc/_search

{
  "took" : 2, //查询时间(毫秒数)
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "nfc phone",
          "desc" : "shouji zhong de hongzhaji",
          "price" : 2999,
          "tags" : [
            "xingjiabi",
            "fashao",
            "menjinka"
          ]
        }
      },
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "xiaomi erji",
          "desc" : "erji zhong de huangmenji",
          "price" : 999,
          "tags" : [
            "low",
            "bufangshui",
            "yinzhicha"
          ]
        }
      },
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "hongmi erji",
          "desc" : "erji zhong de kendeji",
          "price" : 399,
          "tags" : [
            "lowbee",
            "xuhangduan",
            "zhiliangx"
          ]
        }
      },
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "xiaomi phone",
          "desc" : "shouji zhong de zhandouji",
          "price" : 99999
        }
      }
    ]
  }
}

当然,_search这种搜索可以带参数:
根据价格正序查询:

GET /product/_doc/_search?sort=price:asc

匹配price为666的数据

GET /product/_doc/_search?q=price:666

更新数据

全量字段更新

语法格式

PUT /index名称/type名称/id值
{
    Json数据
}

类似于插入操作,如果检测到已经存在当前id的数据,那么会将新值把老值覆盖,但存在问题:如果不给字段,那么原有字段就意味着丢失了。

例子

接下来操作一下id为1的product数据,先查看一下:

GET /product/_doc/1
{
  "_index" : "product",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "xiaomi phone",
    "desc" : "shouji zhong de zhandouji",
    "price" : 3999,
    "tags" : [
      "xingjiabi",
      "fashao",
      "buka"
    ]
  }
}

对id为1的product进行更新:

PUT /product/_doc/1
{
    "name" : "xiaomi phone",
    "desc" :  "shouji zhong de zhandouji",
    "price" :  12999
}

再次查看:

GET /product/_doc/1
{
  "_index" : "product",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 5,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "xiaomi phone",
    "desc" : "shouji zhong de zhandouji",
    "price" : 12999
  }
}

发现,tags没了,这属于全量字段覆盖。

指定字段更新

语法格式

POST /索引名/type类型/id/_update
{
    "doc":{
        "字段名称":value
    }
}

例子

还是修改product id为1的数据,只改price:

POST /product/_doc/1/_update
{
    "doc":{
        "price":99999
    }
}

然后发现其他字段没少,price也成功改成了99999了。

乐观锁:
在这里插入图片描述

删除数据

DELETE /索引名/type类型/id

delete不会立马将数据物理删除,而是一种延时删除(软删除),当积攒到一定量时ES集体将这些无效数据进行清除。
这体现在:如果你立马将某一条id数据删除后,又立马进行插入一条相同id的数据,此时它的版本号是在之前删除的数据版本号上进行递增的。

返回格式美化

当你在浏览器进行访问ES的REST API的时候,返回的JSON可能是不太美观的。
可以在最后参数后面跟一个pretty,可以返回格式化的json信息。
例如:

GET /product/_doc/1?pretty
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值