ES 7.9.0 初探之索引创建与数据的CURD

上一篇已经把elasticsearch与kibana环境搭建好,但是还没有进行具体的操作,今天咱们就搞起来!!

1.环境说明

名称版本
docker19.03
elasticsearch7.9.0
kibana7.9.0

2.基本概念

我要抄点内容给各位大爷瞧瞧了。

含义备注
cluster集群,Elasticsearch 集群由一个或多个节点组成,可通过其集群名称进行标识。通常这个 Cluster 的名字是可以在 Elasticsearch 里的配置文件中设置的。
node节点,单个 Elasticsearch 实例。 一个集群由一个或多个 node 组成。
index索引,文档的集合。每个index可以包括一个或者多个documents相当于数据库的概念
type类型,是文档的逻辑容器。由于一些原因,在 Elasticsearch 6.0 以后,一个 Index 只能含有一个 type。在默认的情况下是 _doc。在未来8.0的版本中,type 将被彻底删除相当于关系型数据库中的表
documentElasticsearch 是面向文档的,索引或搜索的最小数据单元是文档。文档通常是JSON格式的。相当于行
shard由于 Elasticsearch 是一个分布式搜索引擎,因此索引通常会拆分为分布在多个节点上的称为分片的元素。 Elasticsearch 自动管理这些分片的排列。 它还根据需要重新平衡分片,因此用户无需担心细节。
replica默认情况下,Elasticsearch 为每个索引创建一个主分片和一个副本。这意味着每个索引将包含一个主分片,每个分片将具有一个副本。
mapping用于定义一个索引(index)的某个类型(type)的数据的结构。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。类似于传统关系型数据中table的schema

我有点懒,不想抄了。Elasticsearch中的一些重要概念:cluster, node, index, document, shards及replica

3.实战操作

光说不练假把式,那就真刀真枪实战!
之前环境以及搭建好,那么我们就打开www.localhost:5601进入kibana的操作台吧。

3.1 创建、获取index

PUT  yytest

就是这么简单,这样就创建好了一个index。我们可以查看一下这个是怎样的一个index。

GET yytest

这样就会得到如下的反问结果

{
  "yytest" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1603977464891",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "QNt1WMRMQ3qi-3JjHs9ttA",
        "version" : {
          "created" : "7090099"
        },
        "provided_name" : "yytest"
      }
    }
  }
}

从这里我们可以看到一些基本的信息:

  • 该index没有别名
  • mapping信息为空,(毕竟暂时还没有定义schema)
  • index创建时间
  • uuid
  • 分片数量 这里只有1个
  • 副本数量 也只有1个
  • version

3.2 创建mapping

我们需要定义数据的格式,那么

POST yytest/_mapping?pretty
{
  "person":{
    "name":{
      "type": "text"
    },
    "age":{
      "type":"integer"
    },
    "birthday":{
      "type":"date",
      "index":false
    }
  }
}

创建完成后就会得到如下的反馈:

{
"acknowledged":true
}

那么创建好的mapping到底是什么样的呢?查看一下好了

GET yytest/_mapping?pretty

{
  "yytest" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "birthday" : {
          "type" : "date",
          "index" : false
        },
        "name" : {
          "type" : "text"
        }
      }
    }
  }
}

3.3 插入数据

由于7.0以后的版本,type默认是_doc,且只有一个,因此在语句中不需要声明type

POST yytest/_doc
{
  "name":"zhangsan",
  "age":23,
  "birthday":"1998-08-28"
}

点击执行,可以得到如下的结果

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

我们可以根据id查看插入数据的详细信息

GET yytest/_doc/PpQHiXUBTpZvBmMgKPhT

得到的结果是

{
  "_index" : "yytest",
  "_type" : "_doc",
  "_id" : "PpQHiXUBTpZvBmMgKPhT",
  "_version" : 1,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "lisi",
    "age" : 25,
    "birthday" : "1995-08-18"
  }
}

注意看,这里的name值是lisi,而且_version的值是1,即是第一个版本。

3.4 修改指定id的数据

PUT yytest/_doc/PpQHiXUBTpZvBmMgKPhT
{
  "name":"lilaosi"
}

执行完成后,我们可以得到如下的结果

{
  "_index" : "yytest",
  "_type" : "_doc",
  "_id" : "PpQHiXUBTpZvBmMgKPhT",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

从返回结果我们可以看到,version值已经由原来的1变成了2,result的值是updated。那我们再看一下更新完的结果是怎么样的

GET yytest/_doc/PpQHiXUBTpZvBmMgKPhT

得到的结果是

{
  "_index" : "yytest",
  "_type" : "_doc",
  "_id" : "PpQHiXUBTpZvBmMgKPhT",
  "_version" : 2,
  "_seq_no" : 3,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "lilaosi"
  }
}

可以看到,原来的数据已经被update了,现在的数据只剩下name的值为lilaosi了。

3.5 删除指定Id的数据

DELETE  yytest/_doc/PpQHiXUBTpZvBmMgKPhT

执行上面的rest请求后,可以得到如下结果

{
  "_index" : "yytest",
  "_type" : "_doc",
  "_id" : "PpQHiXUBTpZvBmMgKPhT",
  "_version" : 4,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 1
}

此时再去搜索该id的数据,得到的结果是

{
  "_index" : "yytest",
  "_type" : "_doc",
  "_id" : "PpQHiXUBTpZvBmMgKPhT",
  "found" : false
}

已经无法找到当前id对映的数据了。

4.总结

  • ES的概念
  • 通过rest实现对数据的CURD
    这里的操作都比较简单,就是简单的curd,对我们来说,感觉似乎与关系型数据库差别不是很大,只是用rest替代了sql语句,完全没有感受到ES的强大。下一篇,继续深入操作,感受ES的魅力。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值