上一篇已经把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的魅力。