Elastic Search 索引、文档和映射的基本操作
1. ES索引的基础操作
1.1 ES创建索引
对于关系型数据库,创建索引就等同于创建数据库。
在Postman中,向ES服务器发送put
请求.
例如创建索引 http://127.0.0.1:9200/shopping
1.2 查看索引
在Postman中,向ES服务器发送Get
请求:http://127.0.0.1:9200/_cat/indices?v
,
请求路径中的_cat表示查看的意思,indices表示索引,所以整体含义就是查看当前ES服务器中的所有索引,类似于MySQL中的show tables的样子。服务器的响应结果如下
1.3 查看单一索引
在Postman中,向ES服务器发送Get请求: http://127.0.0.1:9200/shopping
查看索引向ES服务器发送的的请求路径和创建索引是一致的,但是HTTP方法不一致。
1.4 删除索引
在Postman中,向ES就请你发送Delete请求:htto://127.0.0.1:9200/shopping
在重新访问索引时,服务器响应内容为:索引不存在
2. 文档操作
文档(_doc)可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式。
2.1 创建文档
在Postman中,向ES集群发送post请求,http://127.0.0.1:9200/shopping/_doc
请求体内容为
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
此处请求方式必须为POST,不能是Put,否则发生错误。
上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES服务器会随机生成一个。
如果想要自定义唯一性标识,需要在创建的时候指定: http://127.0.0.1:9200/shopping/_doc/1
{
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":4999.00
}
此处如果添加数据明确数据主键,那么请求方式是Put也是可以的
2.2 查看文档(根据主键)
查看文档时,需要指明文档的唯一性标识,类似于MySQL中数据的主键查询,在Postman中,向ES服务器发送Get请求,http://127.0.0.1:9200/shopping/_doc/1
查询成功后,服务器响应结果如下
2.3 查看所有文档
查看索引下包含的所有文档信息。类似于 select *
,向ES服务器中发送Get请求, http://127.0.0.1:9200/shopping/_search
查询成功后,服务器响应结果如下
2.4 修改文档
和新增文档一样,输入相同的URL地址请求,如果请求体变化,会将原来的数据内容覆盖
。在Postman中,向ES服务器发送Post请求,http://127.0.0.1:9200/shopping/_doc/1
{
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":6999.00
}
修改成功后,服务器响应结果:
2.5 修改某个字段
修改数据时,也可以只修改某一条给定数据的局部信息
在Postman中,向ES服务器发送POST请求,http://127.0.0.1:9200/shoppong/_update/1
请求内容为:
{
"doc": {
"price":3000.00
}
}
修改成功后,服务器响应结果
根据唯一性标识,查询文档结构,可以发现,文档数据已经更新。
2.6 删除文档
在ES中删除一个文档不会立即从磁盘中删除,它只是被标记成已删除(逻辑删除)
在Postman中,向ES服务器发送DELETE请求:http://127.0.0.1:9200/shopping/_doc/1
删除成功后,服务器响应结果
字段 | 说明 |
---|---|
_version | 版本(对数据的操作,都会更新版本) |
result | deleted表示数据被标记为删除 |
删除后再查询当前文档信息
2.7 条件删除文档
一般删除数据都是根据文档的唯一性标识进行删除,实际操作中,也可以根据条件对多条数据进行删除。
首先分别增加多条数据
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":4000.00
}
{
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":4000.00
}
向ES服务器中发送POST请求,http://127.0.0.1:9200/shopping/_delete_by_query
请求内容为
{
"query": {
"match": {
"price": 4000.00
}
}
}
删除成功后,服务器响应结果:
字段 | 说明 |
---|---|
took | 耗时 |
timed_out | 是否超时 |
total | 总数 |
deleted | 删除数量 |
3文档映射
索引库(index)的映射,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等信息;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(Mapping)。
3.1 创建映射
在Postman中,向ES服务器发Put请求,http://127.0.0.1:9200/shopping/_mapping
请求体内容为
{
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
服务器返回的响应结果如下
映射数据说明:
-
字段名:任意填写。比如上面的name、sex、age
-
Type:类型,ElasticSearch中支持的数据类型非常丰富。
- String类型。又可以分为两种
- text:可分词
- keyword:不可分词,数据会作为完整字段进行匹配
- Numerical:数值类型,分为两大类
- 基本数据类型: long、integer、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
- Date:日期类型
- Array:数组类型
- Object:对象
- String类型。又可以分为两种
-
index:是否索引,默认是true,也就是说不进行任何配置,所有字段都会被索引
- true:字段会被索引,则可以用来进行搜索
- false:字段不会被索引,无法用来进行搜索
-
store:是否将数据进行独立存储,默认为false
- 原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储 的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置 "store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用 更多的空间,所以要根据实际业务需求来设置。
-
analyzer:分词器,这里的ik_max_word即使用ik分词器。
3.2 查看映射
在Postman中,向ES服务器发送Get请求,http://127.0.0.1:9200/shopping/_mapping
服务器响应结果如下
3.3 索引映射关联
初始化索引,并创建索引中的字段对应的映射关系。
向ES服务器发送Put请求,http://127.0.0.1:9200/student
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
}
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
}
服务器响应结果如下