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

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

1.环境说明

名称 版本
docker 19.03
elasticsearch 7.9.0
kibana 7.9.0

2.基本概念

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

含义 备注
cluster 集群,Elasticsearch 集群由一个或多个节点组成,可通过其集群名称进行标识。通常这个 Cluster 的名字是可以在 Elasticsearch 里的配置文件中设置的。
node 节点,单个 Elasticsearch 实例。 一个集群由一个或多个 node 组成。
index 索引,文档的集合。每个index可以包括一个或者多个documents 相当于数据库的概念
type 类型,是文档的逻辑容器。由于一些原因,在 Elasticsearch 6.0 以后,一个 Index 只能含有一个 type。在默认的情况下是 _doc。在未来8.0的版本中,type 将被彻底删除 相当于关系型数据库中的表
document Elasticsearch 是面向文档的,索引或搜索的最小数据单元是文档。文档通常是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的魅力。

你可能感兴趣的:(elasticsearch,java,elasticsearch)