• 【Elasticsearch】数据简单操作(二)


    简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。

    本文主要介绍ES索引的操作,索引中数据的操作,增、删、改功能。

    一、环境准备

    版本

    Docker version 20.10.22
    elasticsearch:7.13.3
    kibana:7.13.3
    ps:具体启动命令参考第一篇ES博客

    二、创建索引

    创建索引

    创建索引,my_test_index,分别有四个字段id、name、age、remark
    PUT:代表请求方式为 put 类型
    my_test_index:代表索引的名称
    number_of_shards:分片数
    number_of_replicas:副本数

    正如上述所说,put请求是restful请求中的类型,也就是说es支持http请求的方式执行命令,只需在/前添加es的地址即可。

    PUT /my_test_index_part2
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "keyword"
          },
          "age": {
            "type": "integer"
          },
          "remark": {
            "type": "text"
          }
        }
      }
    }
    
    // 执行结果
    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "my_test_index_part2"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    三、数据操作

    添加数据(Document)

    索引(index)中的数据称为document,一条document相当于一条数据,下面介绍几种添加数据的方法

    POST /<index>/_doc
    PUT /<index>/_doc/<_id>
    
    POST /<index>/_create/<_id>
    PUT /<index>/_create/<_id>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第一个单词代表请求方式、指索引名称、_doc_create代表是两种方式插入数据,下面开始插入数据

    _doc方式

    分别执行下面命令

    POST /my_test_index_part2/_doc
    {
      "id": "1",
      "name": "张三",
      "age": "18",
      "remark": "张三爱吃肉"
    }
    
    POST /my_test_index_part2/_doc/2
    {
      "id": "2",
      "name": "李四",
      "age": "19",
      "remark": "李四爱吃水果"
    }
    
    PUT /my_test_index_part2/_doc/3
    {
      "id": "3",
      "name": "王五",
      "age": "20",
      "remark": "王五爱吃蔬菜"
    }
    
    GET /my_test_index_part2/_search
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    先说结论,在_doc的情况下

    • POST 可以创建成功,但是 _id 是es随机给定的
    • POST + <_id> 可以创建成功,_id也是我们指定的
    • PUT 不可以运行
    • PUT + <_id> 可以创建成功,_id也是我们指定的

    运行结果如下:

    {
      // 省略....
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "my_test_index_part2",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "id" : "2",
              "name" : "李四",
              "age" : "19",
              "remark" : "李四爱吃水果"
            }
          },
          // 省略....
          {
            "_index" : "my_test_index_part2",
            "_type" : "_doc",
            "_id" : "8tf8sYoBBTGuuZu3VQCK",
            "_score" : 1.0,
            "_source" : {
              "id" : "1",
              "name" : "张三",
              "age" : "18",
              "remark" : "张三爱吃肉"
            }
          }
        ]
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    _create方式

    分别执行下面命令

    POST /my_test_index_part2/_create/4
    {
      "id":"4",
      "name": "李四四",
      "age": "21",
      "remark":"李四四爱吃水果"
    }
    
    PUT /my_test_index_part2/_create/5
    {
      "id":"5",
      "name": "王五五",
      "age": "22",
      "remark":"王五五爱吃蔬菜"
    }
    
    GET /my_test_index_part2/_search
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结论,在_create的情况下

    • POST 不可以运行
    • POST + <_id> 可以创建成功,_id也是我们指定的
    • PUT 不可以运行
    • PUT + <_id> 可以创建成功,_id也是我们指定的

    数据(Document)修改

    在上述命令中remark字段添加叹号后运行结果,只有_doc带有<_id>的命令执行成功,其他均失败。结论:必须指定**<_id>**,在**<_doc>**下进行执行才行。

    POST /my_test_index_part2/_doc/5
    {
      "id":"5",
      "name": "王五五",
      "age": "22",
      "remark":"王五五爱吃蔬菜!!!"
    }
    
    // 执行此命令查看修改结果
    GET /my_test_index_part2/_search
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    删除

    <_id>填写返回的_id字段的值即可

    DELETE /<index>/_doc/<_id>
    
    DELETE /my_test_index/_doc/aCnJjYoBcmOMV0ezI5zx
    
    • 1
    • 2
    • 3

    四、结论

    新增

    POST //_doc
    POST //_doc/<_id>

    • <_id>不指定时,ES会为我们自动生成id;
    • 指定<_id>时,且id在索引中不存在,ES将添加一条指定id的数据;
    • 指定<_id>时,但id在索引中存在,ES将会更新这条数据;

    PUT //_doc/<_id>

    • <_id>必须指定,不指定会报错;
    • <_id>在索引中不存在,为添加新数据;
    • <_id>在索引中存在,为修改数据;

    POST //_create/<_id>
    PUT //_create/<_id>

    • id必须指定;
    • 指定的id如果在索引中存在,报错,添加不成功;
    • 指定的id在索引中不存在,添加成功,符合预期;

    删除

    DELETE //_doc/<_id>

    查询

    单条
    GET //_doc/<_id>
    全部
    GET //_doc/_search

  • 相关阅读:
    前端美化库(持续更新)
    探索RESTful API开发,构建可扩展的Web服务
    多态的概念
    SQL语句的执行过程
    Jenkins流水线极速打包
    华为设备流量抑制及风暴控制配置命令
    一文搞懂Qt-MQTT开发
    C++左值引用与右值引用
    如何使用SOLIDWORKS添加装饰螺纹线规格
    Github或Gitlab等申请PR或MR(pull request & merge request)的时候如果不能自动合并代码发生冲突了要怎么办
  • 原文地址:https://blog.csdn.net/xiao_bai_9527/article/details/133300947