IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch 实战(二、简单检索) -> 正文阅读

[大数据]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
      }
    }
  ]
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:43:03  更:2021-07-29 11:43:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 6:48:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码