Elasticsearch(ES) 添加/更新映射
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观
本节中,我们将学习如何向 Elasticsearch(ES) 添加/更新映射关系。
通过 Elasticsearch API 可以向索引(Index) 添加文档类型(Type), 或者向文档类型(Type) 中添加/更新字段(Field)。
PUT http://127.0.0.1:9200/commodity
入参:
{
"mappings": {
"_doc": {
"properties": {
"commodity_id": {
"type": "long"
},
"commodity_name": {
"type": "text"
},
"picture_url": {
"type": "keyword"
}
}
}
}
}
接下来,通过 Postman 工具来实际操作一下:
通过上面 API, 我们创建了一个名称为 commodity
(商品) 的索引,类型为_doc
, 且包含了三个字段(field), 分别为 commodity_id
(商品id)、commodity_name
(商品名称)、picture_url
(商品图片)。
一、向已存在的类型中添加字段
commodity 索引创建成功后,我们还可以向其中添加新的字段,下面添加一个 price(价格)字段:
PUT http://127.0.0.1:9200/commodity/_mapping/_doc
入参:
{
"properties": {
"price": {
"type": "double"
}
}
}
用 Postman 工具演示一下:
二、同时向多个索引设置映射
Elasticsearch 允许同时向多个索引添加文档类型。
PUT http://127.0.0.1:9200/{index}/_mapping/{type}
{body}
{index}
: 索引可以有多种指定方式:- 逗号分隔符,比如:
comodity1,commodity2
; _all
: 表示所有索引;commodity*
:表示以 commodity 为前缀的所有索引;
- 逗号分隔符,比如:
{type}
: 需要添加或更新的文档类型;{body}
:需要添加的字段或字段类型;
接下来,我们测试一下,先创建两个未设置映射的空索引 commodity1
、commodity2
:
PUT http://127.0.0.1:9200/commodity1
PUT http://127.0.0.1:9200/commodity1
然后向这两个索引同时添加映射:
PUT http://localhost:9200/commodity1,commodity2/_mapping/_doc
入参:
{
"properties": {
"commodity_id": {
"type": "long"
},
"commodity_name": {
"type": "text"
},
"picture_url": {
"type": "keyword"
}
}
}
使用 Postman 执行请求:
设置映射信息成功!
三、更新字段映射
一些情况下,我们需要对某个索引当前类型进行更新,比如:
- 添加一个新的字段;
- 更改原有的某个字段;
- 禁用
doc_values
(默认情况是开启的); - 添加
ignore_above
参数; - ...
Note:关于 ignore_above 参数,若字段长度超过指定的值,则该字段不会被索引起来,也就是说查询不到。
接下来,为了演示,我们先删除之前 commodity 索引,重新建立:
PUT http://127.0.0.1:9200/commdoty
入参:
{
"mappings": {
"_doc": {
"properties": {
"commodity_id": {
"type": "long"
},
"commodity_name": {
"properties": {
"first": {"type": "text"}
}
},
"picture_url": {
"type": "keyword"
}
}
}
}
}
需要注意,commodity_name
字段是一个对象数据类型(Object datatype)。
对象类型指的是,这个字段是个对象,它里面还可以存储多个属性字段。
接着,索引映射新建成功后,我们尝试去更新:
PUT http://127.0.0.1:9200/commdoty/_mapping/_doc
入参:
{
"properties": {
"commodity_id": {
"type": "long"
},
"commodity_name": {
"properties": {
"last": {
"type": "text"
}
}
},
"picture_url": {
"type": "keyword",
"ignore_above": 500
}
}
}
上述请求中,我们对 commodity_name 对象数据类型增加了一个 last 属性,并且修改了 picture_url 字段,将 ignore_above
设置成了 500。
Ref
- 《Elasticsearch 技术解析与实战》