映射(mapping)
映射像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。
增加映射
API允许向索引(index)添加文档类型(type),或者向文档类型中添加字段(field)。
PUT /secisland
{
"mappings": {
"log":{
"properties": {
"message":{
"type": "text"
}
}
}
}
}
GET /secisland/_mapping
复制代码
添加索引名为secisland,文档类型为log,其中包含字段message,字段类型为text。
PUT secisland/_mapping/user
{
"properties": {
"name": {
"type": "text"
}
}
}
复制代码
向已经存在的索引secisland添加文档类型为user,包含字段name,字段类型为text。
```js PUT secisland/_mapping/log { "properties": { "user_name": { "type": "text" } } } ``` 已经存在索引secisland,文档类型为log,添加新的字段user_name,字段类型是字符串。
//查看mapping
GET /secisland/_mapping
复制代码
返回:
{
"secisland": {
"mappings": {
"user": {
"properties": {
"name": {
"type": "text"
}
}
},
"log": {
"properties": {
"message": {
"type": "text"
},
"user_name": {
"type": "text"
}
}
}
}
}
}
复制代码
1. 多个索引设置映射
可以一次向多个索引添加文档类型:
PUT /{index}/_mapping/{type}
{body}
复制代码
- {index}可以有多种方式,都好分隔:比如test1,test2,test3。
_all
表示所有索引。通配符*
表示所有。test*
表示以test开头。 - {type}需要添加或更新的文档类型。
- {body}需要添加的字段或字段类型
2. 更新字段映射
在一般情况下,对现有字段的映射不会更新。对这个规则有一些例外。
- 新的属性被添加到对象数据类型的字段。
- 新的多域字段被添加到现有的字段。
- doc_values可以被禁用。
- 增加了ignore_above参数
3. 不同类型之间的冲突
在同一个索引的不同类型中,相同名称的字段中必须有相同的映射,因为它们内部是在同一个领域内,如果试图在这种情况下更新映射参数,系统将会抛出异常。除非在更新的时候指定update_all_types参数。在这种情况下它将更新所有同一索引同名称的映射参数。
示例:
PUT /secisland/
{
"mappings": {
"type_one":{
"properties": {
"text":{"type": "text", "analyzer": "standard"}
}
},
"type_two":{
"properties": {
"text":{"type": "text", "analyzer": "standard"}
}
}
}
}
复制代码
修改type_one的映射
PUT /secisland/_mapping/type_one
{
"properties": {
"text":{
"type": "text",
"analyzer": "standard",
"search_analyzer": "whitespace"
}
}
}
复制代码
报错:
如果要修改,添加参数update_all_types,同时更新两个类型。
PUT /secisland/_mapping/type_one?update_all_types
{
"properties": {
"text":{
"type": "text",
"analyzer": "standard",
"search_analyzer": "whitespace"
}
}
}
复制代码
获取映射
获取文档映射接口允许通过索引或者索引和类型来搜索:
GET /secisland/_mapping/type_one
复制代码
系统支持同时获取多个索引和类型的语法。
获取文档映射接口一次可以获取多个索引或文档映射类型。
格式如下:
GET /{index}/_mapping/{type}
{type}和{index}可以接受逗号(,)分隔符,也可以使用_all来表示全部索引。
复制代码
获取字段映射
获取文档字段接口允许搜索一个或多个字段。这个用来搜索想要搜索的字段, 而不是某个索引或者文档类型的全部内容。
示例:搜索secisland索引中type_one所有为text类型的字段
GET /secisland/_mapping/type_one/field/text
复制代码
返回:
{
"secisland": {
"mappings": {
"type_one": {
"text": {
"full_name": "text",
"mapping": {
"text": {
"type": "text",
"analyzer": "standard",
"search_analyzer": "whitespace"
}
}
}
}
}
}
}
复制代码
一次获取多个索引或文档映射类型:
GET /{index}/{type}/_mapping/field/{field}
复制代码
{index},{type},{field}可以使用逗号(,)分隔,也可以使用通配符。
GET /secisland,kimchy/_mapping/field/message
GET /_all/_mapping/secilog,book/field/message,user.id
GET /_all/_mapping/tw*/field/*.id
复制代码
指定字段的操作如下。获取文档字段接口,可以使用逗号(,)分隔符或者通配符(*)。
对象类型的字段可以使用(.
)来指定具体字段。
GET /secisland/_mapping/article/field/author.id
复制代码
判断类型是否存在
检查索引或文档类型是否存在:
HEAD /secisland/secilog
复制代码
存在返回200,不存在返回404
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。