主要知识点:

  • 理解dynamic mapping
  • 定制dynamic mapping
  • 更改default dynamic mapping

 
 

一、理解dynamic mapping

1、基本概念

One of the most important features of Elasticsearch is that it tries to get out of your way and let you start exploring your data as quickly as possible. To index a document, you don't have to first create an index, define a mapping type, and define your fields--you can just index a document and the index, type, and fields will spring to life automatically:

PUT data/_doc/1

{ "count": 5 }

  

Creates the data index, the _doc mapping type, and a field called count with datatype long.

The automatic detection and addition of new fields is called dynamic mapping.(这种自己检测和新增fields被称为动态映射) The dynamic mapping rules can be customised to suit your purposes with:

Dynamic field mappings

The rules governing dynamic field detection.

Dynamic templates

Custom rules to configure the mapping for dynamically added fields.

 
 

Index templates allow you to configure the default mappings, settings and aliases for new indices, whether created automatically or explicitly.

总结如下:dynamic mapping就是es为各个document的fields自动映射到不同的类型,这种动态映射可以由es自动完成,所以我们可以在没有建立index时就插入数据,也程序员指定,程序员指定时是在新创建index时指定,指定方式中按es对新的fields的处理不同分为三种策略

  • true:遇到陌生字段,就进行dynamic mapping
  • false:遇到陌生字段,就忽略
  • strict:遇到陌生字段,就报错

 
 

2、示例一,

PUT /my_index

{

"mappings": {

"my_type": {

"dynamic": "strict", # 把整个type指定为strict

"properties": {

"title": {

"type": "text"

},

"address": {

"type": "object",

"dynamic": "true" # 因为把整个type指定为strict,这个把address指定为true

}

}

}

}

}

 
 

插入数据,测试新建index

PUT /my_index/my_type/1

{

"title": "my article",

"content": "this is my article",

"address": {

"province": "guangdong",

"city": "guangzhou"

}

}

执行结果如下,发现address并不会出错,但是content出错。

{

"error": {

"root_cause": [

{

"type": "strict_dynamic_mapping_exception",

"reason": "mapping set to strict, dynamic introduction of [content] within [my_type] is not allowed"

}

],

"type": "strict_dynamic_mapping_exception",

"reason": "mapping set to strict, dynamic introduction of [content] within [my_type] is not allowed"

},

"status": 400

}

 
 

再次按原新建index的要求插入数据,发现不会出错。

PUT /my_index/my_type/1

{

"title": "my article",

"address": {

"province": "guangdong",

"city": "guangzhou"

}

}

 
 

3、查看_mapping的结果

语法:GET /my_index/_mapping/my_type

执行结果如下:

{

"my_index": {

"mappings": {

"my_type": {

"dynamic": "strict",

"properties": {

"address": {

"dynamic": "true",

"properties": {

"city": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

},

"province": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

}

}

},

"title": {

"type": "text"

}

}

}

}

}

}

 
 

二、定制dynamic mapping策略

 
 

1、date_detection

 
 

默认会按照一定格式识别date,比如yyyy-MM-dd。但是如果某个field定义了一个2017-01-01的值,就会被自动dynamic mapping成date,后面这个field值如果是"hello world"之类的值,就会报错。可以手动关闭某个type的date_detection,如果有需要,自己手动指定某个field为date类型。

 
 

PUT /my_index/_mapping/my_type

{

"date_detection": false

}

 
 

2、定制dynamic mapping template(type level)

 
 

PUT /my_index

{

"mappings": {

"my_type": {

"dynamic_templates": [

{ "en": {

"match": "*_en",

"match_mapping_type": "string",

"mapping": {

"type": "string",

"analyzer": "english"

}

}}

]

}}}

 
 

插入两条数据

PUT /my_index/my_type/1

{

"title": "this is my first article"

}

 
 

PUT /my_index/my_type/2

{

"title_en": "this is my first article"

}

 
 

结果:title没有匹配到任何的dynamic模板,默认就是standard分词器,不会过滤停用词,is会进入倒排索引,用is来搜索是可以搜索到的

title_en匹配到了dynamic模板,就是english分词器,会过滤停用词,is这种停用词就会被过滤掉,用is来搜索就搜索不到了

 
 

3、更改default mapping template(index level)

PUT /my_index

{

"mappings": {

"_default_": {

"_all": { "enabled": false }

},

"blog": {

"_all": { "enabled": true }

}

}

}

65.dynamic mapping的更多相关文章

  1. mapping 详解5(dynamic mapping)

    概述 在使用 ES 的时,我们不需要事先定义好映射设置就可以直接向索引中导入文档.ES 可以自动实现每个字段的类型检测,并进行 mapping 设置,这个过程就叫动态映射(dynamic mappin ...

  2. ES 12 - 配置使用Elasticsearch的动态映射 (dynamic mapping)

    目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2. ...

  3. Dynamic Mapping和常见字段类型

    原文:Dynamic Mapping和常见字段类型 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn. ...

  4. ElasticSearch7.3 学习之Mapping核心数据类型及dynamic mapping

    1.mapping的核心数据类型以及dynamic mapping 1.1 核心的数据类型 string :text and keyword,byte,short,integer,long,float ...

  5. ElasticSearch7.3 学习之定制动态映射(dynamic mapping)

    1.dynamic mapping ElasticSearch中有一个非常重要的特性--动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 当ES在文档中 ...

  6. Elasticsearch:Dynamic mapping

    Elasticsearch最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据. 要索引文档,您不必首先创建索引,定义映射类型和定义字段 - 您只需索引文档,那么index,type和fie ...

  7. elastic 查询案例Query与Filter + CRUD简单理解 + dynamic mapping + keyword

    1.增 PUT mytest01/external/ { "name": "xiaowei" } curl -XPUT '192.168.1.49:9200/m ...

  8. mapping 详解1(mapping type)

    映射(mapping) 映射是定义一个文档以及其所包含的字段如何被存储和索引的方法. 例如,用映射来定义以下内容: 哪些 string 类型的 field 应当被当成当成 full-text 字段 哪 ...

  9. elasticsearch篇之mapping

    2018年05月17日 18:01:37 lyzkks 阅读数:444更多 个人分类: Elastic stack   版权声明:文章内容来自于网络和博主自身学习体会,转载请注明出处,欢迎留言大家一起 ...

随机推荐

  1. SVN提交代码冲突解决方法总结

    在近期svn提交代码时遇到多种情况的问题,现做一个解决办法的总结如下: 插播一条:idea下被svn版本控制各类文件的颜色区分,红棕色,未加入版本控制:绿色,已经加入控制暂未提交:蓝色,加入,已提交, ...

  2. java(JSP)中几种获取项目路径方式

    在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...

  3. 启动Tomcat任何程序都报错

    启动Tomcat出现: Cannot publish to the server because it is missing its runtime environment. 可能是servers中不 ...

  4. bzoj 1822 冷冻波

    题目大意: 在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵 我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线距离不超过R,且巫妖和小精灵的 ...

  5. 回顾2017Java 小结

    一.Java语言最流行 最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言,Python 是最多人想去尝试的语言. https: ...

  6. 如何在vue项目中引入阿里巴巴的iconfont图库

    1. 打开 http://www.iconfont.cn/ 2. 选择我们喜欢的图标,点击上面的小车,加入图标库,即右侧的购物车 3.点击购物车,点击下载代码 4.解压下载的文件夹,将文件夹复制到 a ...

  7. PCB javascript解析钻孔(Excellon)格式实现方法

    解析钻孔(Excellon)格式前首先得了解此格式,这样才能更好的解析呀. 一个钻孔里面包含的基本信息如下: 1.单位:公式mm,英制inch 2.省零方式:前省零,后省零 3.坐标方式:绝对坐标,相 ...

  8. Atlantis(坐标离散化)

    http://poj.org/problem?id=1151 题意:给出矩形的左上角坐标和右下角坐标(坐标的y轴是向下的),求出矩形面积的并.. 今天好困啊..迷迷糊糊的听会神给讲了讲,敲完之后调试了 ...

  9. 洛谷P1330 封锁阳光大学(二分图染色)

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  10. codevs1005生日礼物(dfs)

    1005 生日礼物  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 9月12日是小松的朋友小寒的生日.小松知道小寒特别 ...