目录

  • 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)相关推荐

  1. ElasticSearch关于映射mapping介绍

    #首先我们还是先增加几个文档 PUT /myindex/article/1 {"post_date": "2020-03-14","title&quo ...

  2. elasticsearch的映射(mapping)和分析(analysis)

    转发自:http://blog.csdn.net/hzrandd/article/details/47128895 分析和分析器 分析(analysis)是这样一个过程: 首先,表征化一个文本块为适用 ...

  3. ElasticSearch映射Mapping

    1.1 什么是映射 (1) 映射(mapping): 定义index的元数据, 指定要索引并存储的文档的字段类型. 也就是说映射决定了Elasticsearch在建立倒排索引.进行检索时对文档采取的相 ...

  4. Elasticsearch——使用Java API实现ES中的索引、映射、文档操作

    文章目录: 1.开篇 2.案例详解 2.1 创建ES客户端:完成与ES服务端的连接 2.2 创建索引 2.3 查看索引 2.4 删除索引 2.5 创建文档 2.6 修改文档 2.7 查看文档 2.8 ...

  5. 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问

    一.ElasticSearch简述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch ...

  6. JAVA商城项目(微服务框架)——第11天 elasticsearch搜索

    0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...

  7. 谷粒商城项目8——商品上架 上架商品sku保存到es nginx配置

    文章目录 一.商城业务 1.商品上架 1.1 ES 的存储结构分析 1.2 PUT product 1.3 一些细节 2.商品上架-构造基本数据 3.商品上架-业务代码: 4.商品上架-search模 ...

  8. 一文搞懂Elasticsearch索引的mapping与setting

    目录 Elasticsearch索引结构 Mapping Setting Elasticsearch索引结构 一个Elasticsearch索引的主要结构如下: {"test_index&q ...

  9. 服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程

    docker安装配置elasticsearch,kibana和IK分词器 elasticsearch文章系列 前置安装docker 创建docker网络 安装Elasticsearch 运行elast ...

最新文章

  1. 收藏 | 28个R语言绘图的实用程序包!
  2. java中常见的异常类
  3. linux关闭涉及安全的服务,Linux中关闭不必要服务减少漏洞
  4. 笔试训练第三次知识点汇总
  5. tensorflow-tf.nn.conv2d卷积运算(2)
  6. mysql 不匹配的_mysql – 如何从两个表中获取不匹配的记录
  7. 第十四期: 拥有7000多万店铺和10多亿件商品的微店如何打造AI系统?
  8. 64位Windows 7平台安装32位Timesten,配置ODBC数据源
  9. 转:FileReader详解与实例---读取并显示图像文件
  10. 使用一个DataContext,还是多个?
  11. Visio2016安装
  12. 计算机应用技术辅助设计方向课程,AutoCAD计算机辅助设计课程标准.doc
  13. 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相
  14. Foxdisk11-小字库显示汉字2
  15. iOS8 定位新增功能
  16. D3基本图表绘制——折线图
  17. 峰值预测性能指标PPTS(Peak percentage of threshold statistic)
  18. 中国的手机号码格式化/分类工具
  19. 跑得快人工智能自动代打训练程序设计
  20. 苹果App Store出现故障 搜索张冠李戴

热门文章

  1. 前沿 | 张钹院士畅谈清华大学如何办人工智能专业
  2. 百度计算机视觉暑期实习面经(成功上岸!已拿offer)
  3. 盘点IT中最热门的岗位,有你工作的岗位吗?
  4. 对!这就是你要的pandas数据清洗练习题(❤️)
  5. 脚本应用实例_Selenium自动化中无头浏览器的应用
  6. php post 400,post数据时报错:远程服务器返回错误: (400) 错误的请求。
  7. mysql 加随机数,如何插入随机数MySql
  8. linux ioctl 设备只读,linux – 尝试SSH时设备的ioctl不合适
  9. 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询
  10. JQuery的 serializeObject 序列化form表单