【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"
}

三、数据操作

添加数据(Document)

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

POST /<index>/_doc
PUT /<index>/_doc/<_id>

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

第一个单词代表请求方式、指索引名称、_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

先说结论,在_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" : "张三爱吃肉"
        }
      }
    ]
  }
}
_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

结论,在_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

删除

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

DELETE /<index>/_doc/<_id>

DELETE /my_test_index/_doc/aCnJjYoBcmOMV0ezI5zx

四、结论

新增

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

你可能感兴趣的:(ES,elasticsearch,大数据,搜索引擎)