Elasticsearch 实战(二、简单检索)

查询 es 相关的一些信息

  1. /_cat/nodes 查看 es 内节点信息
  2. /_cat/health 查看 es 的健康状况
  3. /_cat/master 查看主节点信息
  4. /_cat/indices 查看所有索引信息

保存一条数据

PUT 方式

使用 put 方式发送数据时,需要指定 Index/Type/Id

// 例中 Index 为 amdin, Type 为 advanced,指定 id 为1
http://100.100.100.100:9200/admin/advanced/1

其中需要携带 json 格式的请求体

{
    "name":"lvshui5u"
}

请求后返回信息为

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

其中 _version 表示当前数据的版本号,result 表示当前操作的状态,如果发送请求前不存在当前数据,即为 created。

再次发送相同的请求,查看返回体。

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

此时版本号增加,操作状态为 updated。

POST 方式

与 put 方式最大的差异是可以不指定 id

http://100.100.100.100:9200/admin/advanced/

查看返回体

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

此时,系统会自动生成一个唯一 id。再次发送不带 id 的 post 请求后会再增加一条数据。

如果指定 id 用法与 put 相同。


查询一条数据

GET 方式

发送请求,需要指定 Index/Type/Id

http://100.100.100.100:9200/admin/advanced/1

返回体

{
    "_index": "admin",
    "_type": "advanced",
    "_id": "1",
    "_version": 2,
    "_seq_no": 1,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": "lvshui5u"
    }
}

其中 _seq_no 是并发控制字段,每次有更新就会增加。_primary_term 指数据所在主分片编号。这两个字段用来控制并发。

模拟乐观锁,在两次更新时携带上面两个字段参数,如果符合才进行修改。

两次 put 操作:

http://100.100.100.100:9200/admin/advanced/1?if_seq_no=1&if_primary_term=1

第一次成功

第二次失败

{
    "error": {
        "root_cause": [
            {
                "type": "version_conflict_engine_exception",
                "reason": "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [5] and primary term [1]",
                "index_uuid": "0BU3iav9S_eqK0jxZ-E_Bg",
                "shard": "0",
                "index": "admin"
            }
        ],
        "type": "version_conflict_engine_exception",
        "reason": "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [5] and primary term [1]",
        "index_uuid": "0BU3iav9S_eqK0jxZ-E_Bg",
        "shard": "0",
        "index": "admin"
    },
    "status": 409
}

显示 ,此时的 _seq_no 值为 5 ,不允许更新操作。


更新一条数据

除了上面说的两种 PUT 和 POST 方式,还有一种使用 POST 携带参数 _update 方式

http://100.100.100.100:9200/admin/advanced/1/_update

携带请求体

{
    "doc":{
        "name":"绿水本无忧"
    }
}

这里的请求体与之前两种方式不同,需要添加前面的 doc

响应与之前一样

{
    "_index": "admin",
    "_type": "advanced",
    "_id": "1",
    "_version": 4,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 6,
    "_primary_term": 1
}

其 result 状态为 updated,版本号也改变了。

再次发送,不改变请求体里的 json 内容。

响应体如下:

{
    "_index": "admin",
    "_type": "advanced",
    "_id": "1",
    "_version": 4,
    "result": "noop",
    "_shards": {
        "total": 0,
        "successful": 0,
        "failed": 0
    },
    "_seq_no": 6,
    "_primary_term": 1
}

可以看到,与之前的更新不同的是,版本号没有改变,result 状态为 noop,意为 no operate,没有进行操作。携带 _update 会检查原数据与更新数据是否相同。


删除一条数据

使用 DELETE 方式发送请求,指明 Index/Type/Id

http://100.100.100.100:9200/admin/advanced/1/

响应体

{
    "_index": "admin",
    "_type": "advanced",
    "_id": "1",
    "_version": 5,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 7,
    "_primary_term": 1
}

result 显示 deleted。

再次查询,得到的响应为

{
    "_index": "admin",
    "_type": "advanced",
    "_id": "1",
    "found": false
}

显示查找 404 not found。


删除整个索引

使用 DELETE 方式发送请求,指明 Index

http://100.100.100.100:9200/admin

响应体为

{
    "acknowledged": true
}

再次查询,响应体为

{
    "error": {
        "root_cause": [
            {
                "type": "index_not_found_exception",
                "reason": "no such index [admin]",
                "resource.type": "index_expression",
                "resource.id": "admin",
                "index_uuid": "_na_",
                "index": "admin"
            }
        ],
        "type": "index_not_found_exception",
        "reason": "no such index [admin]",
        "resource.type": "index_expression",
        "resource.id": "admin",
        "index_uuid": "_na_",
        "index": "admin"
    },
    "status": 404
}

可以看出和删除一条数据的响应体不同,这里直接指明 index not found。


批量执行

发送 POST 请求,携带参数 _bulk,语法格式为

{action:{metadata}}
{request body}

{动作:{元数据}}
{请求体}

比如 POST /admin/advanced/_bulk

貌似 postman 不支持批量执行,移步 Kibana 执行,插入两条数据

{"index":{"_id":"1"}}
{"name":"lvshui5u"}
{"index":{"_id":"2"}}
{"name":"lllwwy"}

响应体显示了两次操作的返回

#! Deprecation: [types removal] Specifying types in bulk requests is deprecated.
{
  "took" : 87,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "admin",
        "_type" : "advanced",
        "_id" : "1",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "admin",
        "_type" : "advanced",
        "_id" : "2",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1,
        "_primary_term" : 1,
        "status" : 201
      }
    }
  ]
}

插入一个,更新一个,删除一个

POST /admin/advanced/_bulk

{"index":{"_id":"3"}}
{"name":"lvshui5u"}
{"update":{"_id":"3"}}
{"doc":{"name":"lllwwy"}}
{"delete":{"_id":"3"}}

响应

#! Deprecation: [types removal] Specifying types in bulk requests is deprecated.
{
  "took" : 42,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "admin",
        "_type" : "advanced",
        "_id" : "3",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 2,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "update" : {
        "_index" : "admin",
        "_type" : "advanced",
        "_id" : "3",
        "_version" : 2,
        "result" : "updated",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 3,
        "_primary_term" : 1,
        "status" : 200
      }
    },
    {
      "delete" : {
        "_index" : "admin",
        "_type" : "advanced",
        "_id" : "3",
        "_version" : 3,
        "result" : "deleted",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 4,
        "_primary_term" : 1,
        "status" : 200
      }
    }
  ]
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值