一、Elasticsearch
Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。
Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。
在本专栏的前几篇文章中我们介绍过ES 6.X 版本的介绍,包括ELK的搭建,感兴趣的小伙伴也可以看下本专栏的其他文章,本篇内容我们讲解下ES 7.X 版本的使用,该篇文章主要基于RESTful 的方式调用ES所提供的API。
截止到目前,ES的版本已到 7.16.2
在开始前可以去官方地址中下载一个ES7.X版本的安装包,下面是下载地址:
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
从上面的图片可以看出,现在版本已经到了7.16.2,但我们不适用那么新的,这里我选择了个比较适中的版本 7.14.0,太新的不一定就是最好的。
这里我们先使用下window版本进行测试,下篇文章我们讲解ES集群的搭建。下载完成后,解压进入bin下,双击elasticsearch.bat
即可启动ES。
本篇测试基于PostMan发送Rest Http请求的。
二、索引操作
1. 创建索引
在7.XEs的type已逐渐被淘汰,可以把索引理解为传统数据库的表。
向 ES 服务器发 PUT 请求:
http://127.0.0.1:9200/user
如果重复添加索引,会提示错误。
2. 查看所有索引
向 ES 服务器发 GET 请求 :
http://127.0.0.1:9200/_cat/indices?v
已经查出刚才添加的索引。
3. 查看单个索引的详细信息
向 ES 服务器发 GET 请求 :
http://127.0.0.1:9200/user
已经查出,可以看到更详细的信息了,比如上面的分片数和副本数,ES创建索引时不指定分片和副本默认都是1
4. 删除索引
向 ES 服务器发 DELETE 请求 :
http://127.0.0.1:9200/user
再次查询就已经不存在了。
5. 删除索引
三、文档操作
文档可以理解为关系型数据库中的表数据,但ES中的数据格式为 JSON 格式。这里先把上面删除的索引user 创建好,下面就在user索引中进行演示:
1. 创建文档
向 ES 服务器发 POST 请求 :
http://127.0.0.1:9200/user/_doc
请求体内容为:
{
"name":"张三",
"age":18,
"sex":"男"
}
由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
2. 创建文档指定ID
向 ES 服务器发 POST 请求 :
http://127.0.0.1:9200/user/_doc/001
请求体内容为:
{
"name":"张三",
"age":18,
"sex":"男"
}
已经是自定义的ID了。
3. 查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。
向 ES 服务器发 GET 请求 :
http://127.0.0.1:9200/user/_doc/001
4.修改文档(覆盖)
和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖。
向 ES 服务器发 POST 请求 :
http://127.0.0.1:9200/user/_doc/001
请求体内容为:
{
"name":"李四",
"age":20,
"sex":"男"
}
再次查询,可以看到已经修改。
5.修改文档(修改某个字段)
上面是一次修改整个文档,在修改数据时,也可以只修改某一给条数据的局部信息。
向 ES 服务器发 POST 请求 :
http://127.0.0.1:9200/user/_update/001
请求体内容为:
{
"doc": {
"name":"王五"
}
}
再次查询,已经修改。
6.删除文档
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
向 ES 服务器发 DELETE 请求 :
http://127.0.0.1:9200/user/_doc/001
6.根据条件进行删除
可以根据条件对多条数据进行删除。
向 ES 服务器发 POST 请求 :
http://127.0.0.1:9200/user/_delete_by_query
请求体内容为:
{
"query":{
"match":{
"name":"张三"
}
}
}
显示了删除的条数。
四、映射操作
映射操作,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。
1. 创建映射
创建映射前需要创建一个新的索引,下面创建user2
索引:
向 ES 服务器发 PUT 请求:
http://127.0.0.1:9200/user2
下面再来创建映射,向 ES 服务器发 PUT 请求 :
http://127.0.0.1:9200/user2/_mapping
请求体内容为:
{
"properties": {
"name":{
"type": "text",
"index": true
},
"sex":{
"type": "keyword",
"index": true
},
"age":{
"type": "long",
"index": false
}
}
}
type
表示在ES中的数据类型,其中有:
-
String 类型,又分两种:
text:可分词
keyword:不可分词,数据会作为完整字段进行匹配 -
Numerical:数值类型,分两类
基本数据类型:long、integer、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float -
Date:日期类型
-
Array:数组类型
-
Object:对象
index
表示是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。true:字段会被索引,则可以用来进行搜索,false:字段不会被索引,不能用来搜索
store
表示是否将数据进行独立存储,默认为 false,原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。
analyzer
表示分词器,比如 ik 分词器。
2. 查看映射
向 ES 服务器发 GET 请求 :
http://127.0.0.1:9200/user2/_mapping
3. 索引映射关联
在创建索引时,就指定映射关联。
向 ES 服务器发 PUT 请求 :
http://127.0.0.1:9200/user3
请求体内容为:
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
}
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!