ES 11 - 配置Elasticsearch的映射 (mapping)
目录
- 1 映射的相关概念
- 1.1 什么是映射
- 1.2 映射的组成
- 1.3 元字段
- 1.4 字段的类型
- 2 如何配置mapping
- 2.1 创建mapping
- 2.2 更新mapping
- 2.3 查看mapping
1 映射的相关概念
1.1 什么是映射
(1) 映射(mapping): 定义index的元数据, 指定要索引并存储的文档的字段类型.
也就是说映射决定了Elasticsearch在建立倒排索引、进行检索时对文档采取的相关策略, 如数字类型、日期类型、文本类型等等.
需要注意的是: 检索时用到的分析策略, 要和建立索引时的分析策略相同, 否则将导致数据不准确.
(2) ES对不同的类型有不同的存储和检索策略.
① 比如: 对full text型的数据类型(如text), 在索引时, 会经过各类处理 (包括分词、normalization(时态转换、同义词转换、大小写转换)等处理), 才会建立到索引数据中.
② 再比如: 对exact value(如date), 在索引的分词阶段, 会将整个value作为一个关键词建立到倒排索引中.
1.2 映射的组成
每个index都有一 (至多) 个type, 每个type对应一个mapping.
在Elasticsearch 6.X版本开始, 1个index只能有1个type.
每个mapping都由下述部分组成:
① 元字段:
_index
、_type
、_id
和_source
.
② field/properties(字段或属性): 同一index中, 同名的field的映射配置必须相同a) 因为index是根据
_type
元字段来区分type的, 也就是存储的每个文档中都有_type
等元字段, 如果相同名称的field的映射(_type
字段的值)不同, Elasticsearch在解析时就会出现冲突.b) 这些参数可以例外:
copy_to、dynamic、enabled、ignore_above、include_in_all
.
关于type的处理方法, 可以参考博客: ES XX - Elasticsearch对type的处理(type的底层结构).
1.3 元字段
每个文档都有与之关联的元数据 —— ES内部为所有的文档配备的field, 都是以下划线_
开头的内置字段.
具体的内容请参考博文 ES XX - Elasticsearch的元字段 中详细讲解.
1.4 字段的类型
Elasticsearch中每个field都对应一至多个数据类型.
详细的内容请参考博文 ES XX - Elasticsearch中字段的类型 中详细讲解.
2 如何配置mapping
2.1 创建mapping
(1) 必读说明:
① 创建mapping时, 可以指定每个field是否需要:
索 引:
"index": true
—— 默认配置
不索引:"index": false
② mapping root object
:
每个type对应的mapping的JSON串, 包括properties, metadata(_id, _source, _type) , settings(analyzer) , 其他settings(如include_in_all)
(2) 创建mapping的示例:
需求: 创建名为website的索引, 包含一个user类型. user类型中禁用元字段_all
.
PUT website
{"mappings": {"user": { // 这就是一个root object"_all": { "enabled": false }, // 禁用_all字段"properties": {"user_id": { "type": "text" },"name": {"type": "text","analyzer": "english"},"age": { "type": "integer" },"sex": { "type": "keyword" },"birthday": {"type": "date", "format": "strict_date_optional_time||epoch_millis"},"address": {"type": "text","index": false // 不分词}}}}
}
(3) 过期提示说明 —— 这里使用的是Elasticsearch 6.6.10版本:
① 是否索引的API已经做了修改, 若使用"analyzed" | "not_analyzed" | "yes" | "no"等, 将抛出如下警告:
#! Deprecation: Expected a boolean [true/false] for property [index] but got [not_analyzed] #! Deprecation: Expected a boolean [true/false] for property [index] but got [no]
②
_all
元字段也将在7.0版本中移除, 它建议我们使用copy_to
定制自己的all field
:#! Deprecation: [_all] is deprecated in 6.0+ and will be removed in 7.0. As a replacement, you can use [copy_to] on mapping fields to create your own catch all field.
2.2 更新mapping
(1) 必读说明:
映射一旦创建完成, 就不允许修改:
—— Elasticsearch对文档的分析、存储、检索等过程, 都是严格按照mapping中的配置进行的. 如果允许后期修改mapping, 在检索时对索引的处理将存在不一致的情况, 导致数据检索行为不准确.
只能在创建index的时候手动配置mapping, 或者新增field mapping, 但是不能update field mapping.
(2) 更新mapping出现异常:
修改已经创建好的mapping
PUT website {"mappings": {"user": {"properties": {"author_id": { "type": "text" }}}} }
抛出如下错误 —— 索引已经存在的异常:
{"error": {"root_cause": [{"type": "resource_already_exists_exception","reason": "index [website/mVYk4-a7RMOZbkcCp2avfw] already exists","index_uuid": "mVYk4-a7RMOZbkcCp2avfw","index": "website"}],"type": "resource_already_exists_exception","reason": "index [website/mVYk4-a7RMOZbkcCp2avfw] already exists","index_uuid": "mVYk4-a7RMOZbkcCp2avfw","index": "website"},"status": 400 }
(3) 向mapping中添加新type:
向已有mapping中添加字段及其映射信息:
PUT website/_mapping/user // 修改user类型的_mapping, 注意API的顺序 {"properties": {"new_field": {"type": "text","index": false}} }
2.3 查看mapping
(1) 查看mapping的API:
GET website/_mapping
(2) 查看的结果信息如下:
{"website" : {"mappings" : {"user" : {"_all" : {"enabled" : false // 禁用元字段_all},"properties" : {"address" : {"type" : "text","index" : false // 不索引},"age" : {"type" : "integer"},"birthday" : {"type" : "date"},"name" : {"type" : "text","analyzer" : "english"},"new_field" : { // 后期添加的新字段"type" : "text","index" : false // 不索引},"sex" : {"type" : "keyword"},"user_id" : {"type" : "text"}}}}}
}
版权声明
作者: 马瘦风
出处: 博客园 马瘦风的博客
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.
转载于:https://www.cnblogs.com/shoufeng/p/10648835.html
ES 11 - 配置Elasticsearch的映射 (mapping)相关推荐
- ElasticSearch关于映射mapping介绍
#首先我们还是先增加几个文档 PUT /myindex/article/1 {"post_date": "2020-03-14","title&quo ...
- elasticsearch的映射(mapping)和分析(analysis)
转发自:http://blog.csdn.net/hzrandd/article/details/47128895 分析和分析器 分析(analysis)是这样一个过程: 首先,表征化一个文本块为适用 ...
- ElasticSearch映射Mapping
1.1 什么是映射 (1) 映射(mapping): 定义index的元数据, 指定要索引并存储的文档的字段类型. 也就是说映射决定了Elasticsearch在建立倒排索引.进行检索时对文档采取的相 ...
- Elasticsearch——使用Java API实现ES中的索引、映射、文档操作
文章目录: 1.开篇 2.案例详解 2.1 创建ES客户端:完成与ES服务端的连接 2.2 创建索引 2.3 查看索引 2.4 删除索引 2.5 创建文档 2.6 修改文档 2.7 查看文档 2.8 ...
- 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问
一.ElasticSearch简述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch ...
- JAVA商城项目(微服务框架)——第11天 elasticsearch搜索
0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...
- 谷粒商城项目8——商品上架 上架商品sku保存到es nginx配置
文章目录 一.商城业务 1.商品上架 1.1 ES 的存储结构分析 1.2 PUT product 1.3 一些细节 2.商品上架-构造基本数据 3.商品上架-业务代码: 4.商品上架-search模 ...
- 一文搞懂Elasticsearch索引的mapping与setting
目录 Elasticsearch索引结构 Mapping Setting Elasticsearch索引结构 一个Elasticsearch索引的主要结构如下: {"test_index&q ...
- 服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程
docker安装配置elasticsearch,kibana和IK分词器 elasticsearch文章系列 前置安装docker 创建docker网络 安装Elasticsearch 运行elast ...
最新文章
- 收藏 | 28个R语言绘图的实用程序包!
- java中常见的异常类
- linux关闭涉及安全的服务,Linux中关闭不必要服务减少漏洞
- 笔试训练第三次知识点汇总
- tensorflow-tf.nn.conv2d卷积运算(2)
- mysql 不匹配的_mysql – 如何从两个表中获取不匹配的记录
- 第十四期: 拥有7000多万店铺和10多亿件商品的微店如何打造AI系统?
- 64位Windows 7平台安装32位Timesten,配置ODBC数据源
- 转:FileReader详解与实例---读取并显示图像文件
- 使用一个DataContext,还是多个?
- Visio2016安装
- 计算机应用技术辅助设计方向课程,AutoCAD计算机辅助设计课程标准.doc
- 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相
- Foxdisk11-小字库显示汉字2
- iOS8 定位新增功能
- D3基本图表绘制——折线图
- 峰值预测性能指标PPTS(Peak percentage of threshold statistic)
- 中国的手机号码格式化/分类工具
- 跑得快人工智能自动代打训练程序设计
- 苹果App Store出现故障 搜索张冠李戴
热门文章
- 前沿 | 张钹院士畅谈清华大学如何办人工智能专业
- 百度计算机视觉暑期实习面经(成功上岸!已拿offer)
- 盘点IT中最热门的岗位,有你工作的岗位吗?
- 对!这就是你要的pandas数据清洗练习题(❤️)
- 脚本应用实例_Selenium自动化中无头浏览器的应用
- php post 400,post数据时报错:远程服务器返回错误: (400) 错误的请求。
- mysql 加随机数,如何插入随机数MySql
- linux ioctl 设备只读,linux – 尝试SSH时设备的ioctl不合适
- 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询
- JQuery的 serializeObject 序列化form表单