Elasticsearch--动态映射

Elasticsearch——动态映射 Elasticsearch最重要的功能之一就是它会尽量避开我们的视线,让我们尽快开始探索你的数据。要为文档编制索引,不必首先创建索引、定义映射类型和定义字段 — 您只需为文档编制索引,索引、类型和字段将自动显示: ... 阅读详情

动态映射

在Elasticsearch中可以不事先建好索引结构,在使用的时候可以直接插入文档到索引中,系统会根据文档的内容自动进行索引结构的动态映射,这样就极大地简化了索引的操作。

自动检测添加新类型和字段,被称为动态映射。可以根据目的自定义动态映射的规则:

  • _default_:用于创建新映射类型的基础映射
  • 动态字段映射:控制动态字段检测规则
  • 动态模板:自定义规则来匹配动态添加字段的映射

禁用动态类型创建:
动态类型创建可以通过设置index.mapper.dynamic为false来禁用,无论是在配置文件config/elasticsearch.yml中进行设置还是在每个索引中进行设置:

PUT /_settings
{
  "index.mapper.dynamic":false//对所有的索引禁用动态类型创建
}
_default_映射

默认映射,用作每个新映射类型的基础映射,可以通过在索引增加名为_default_的映射类型来自定义:

PUT /myindex2
{
  "mappings": {
    "_default_":{
      "_all":{"enabled":false}
    },
    "user":{},
    "blogpost":{
      "_all":{"enabled": true}
    }
  }
}
  • _default_映射禁用了_all字段
  • user映射从_default_映射继承了设置
  • blogpost映射重写了默认设置,启动了_all字段

_default_映射可以在索引创建之后进行修改,新的默认映射只会影响到之后创建的映射类型。

动态字段映射

在这里插入图片描述

这些是仅有的可以动态添加的字段数据类型。所有其它的数据类型都必须被明确地添加到映射中。

除了下面列出的选项,可以通过动态模板自定义更多的动态字段映射规则:
1. 日期检查
如果启用日期检查(默认),新的字符串字段的内容会被检查是否匹配任何dynamic_date_formats中指定的日期格式。如果发现匹配,新的日期字段会以相同的格式添加。

//dynamic_date_formats默认值是:
["strict_date_optional_time","yyyy/MM'dd HH:mm:ss Z|| yyyy/MM/dd Z"]

2. 禁用日期检查
通过设置date_detection的值为false来禁用动态日期检查:

PUT /myindex2
{
	"mappings":{
		"test2":{"date_detection":false}
	}
}

3. 自定义日期检查格式

PUT /myindex2
{
	"mappings":{
		"test2":{"dynamic_date_formats":["MM/dd/yyyy"]}
	}
}

4. 数字检查

因为JSON支持浮点型和整型数据类型,一些应用或语言有时会作为字符串传递数字,通常的解决方式是明确这些字段映射,但是可以启用数字检查(默认禁用)来自动做类型转换:

PUT /myindex2
{
	"mappings":{
		"test2":{"number_detection":true}
	}
}	


#### 动态模板
动态模板可以定义自定义映射用来动态添加字段,基于以下参数:
- 通过Elasticsearch金鑫改数据类型检查,利用match_mapping_type参数
- 字段名,利用match and unmatch 或 match_pattern参数
- 字段全路径,利用path_match and path_unmatch参数

原始字段名{name}和数据类型检查{dynamic_type}模板变量可以作为占位符在映射标准中。

`注意:`动态字段映射仅在字段包含具体值(不为null或空数组)的时候添加。这意味着如果在dynamic_template中有null_value选项,第一个文档中被索引的字段有具体的值之后,null_value才会起作用。

动态模板被指定为命名的对象数组:
```js
PUT /myindex2
{
  "mappings": {
    "dynamic_templates":[
      {
        "my_template_name":{
          ... match conditions ...
          "mapping":{...}
        }
      },
      ...
    ]
  }
}
  • 模板名可以是任何字符串值
  • 匹配条件可以包含所有的:match_mapping_type、match、match_pattern、unmatch、path_match、path_unmatch。
  • mapping包含匹配到的字段需要使用的映射值

模板顺序指定——第一个匹配到的模板起作用。新的模板可以用增加接口添加到列表的末尾。如果新的模板和已经存在的模板有相同的名字,旧版本会被替换掉。

1. match_mapping_type
match_mapping_type匹配数据类型,通过动态字段映射检查,换句话就是Elasticsearch认为字段需要拥有的数据类型。

只有下面的数据类型可以被自动检查:

  • boolean
  • date
  • double
  • long
  • object
  • string
    也可以接受*来匹配所有的数据类型。

示例:需要映射所有整数型字段为integer而不是long,以及所有的可分词和不可分词的字符串型字段,可以使用下面的模板:

PUT /myindex2
{
  "mappings": {
    "test2":{
      "dynamic_templates":[
        {
          "integers":{
            "match_mapping_type":"long",//如果匹配为long,改为integer
            "mapping":{"type":"integer"}
          }
        },
        {
          "text":{
            "match_mapping_type":"string",
            "mapping":{
              "type":"string",
              "fields":{
                "raw":{"type":"string", "index":false, "ignore_above":256}
              }
            }
          }
        }
      ] 
    }
  }
}

2. match和unmatch

match参数使用匹配字段名称的方式,unmatch使用排除match匹配的字段的方式。

示例:匹配所有字符串型字段名字以long_开头并排除以_text结束的字段,索引这些字段为长整型字段:

PUT /myindex2
{
  "mappings": {
    "test2":{
      "dynamic_templates":[
        {
          "longs_as_strings":{
            "match_mapping_type":"string",
            "match":"long_*",
            "unmatch":"*_text",
            "mapping":{"type":"long"}
          }
        }
      ]
    }
  }
}

3. match_pattern
match_pattern参数支持完整的Java正则表达式匹配字段名而不是简单的通配符:

"match_pattern":"regex"

4. path_match和path_unmatch

工作方式与match和unmatch相同,但是在字段全路径上进行操作,不仅仅是在最终的名字上:

PUT /myindex2
{
  "mappings": {
    "test2":{
      "dynamic_templates":[
        {
          "full_name":{
            "path_match":"name.*",
            "path_unmatch":"*.middle",
            "mapping":{"type":"string", "copy_to":"full_name"}
          }
        }  
      ]
    }
  }
}

5. {name}和{dynamic_type}
占位符会被映射中的字段名和字段类型替换。

示例:设置所有的字符型字段使用与字段同名的分析器,禁用所有非字符型字段的doc_values参数:

PUT /myindex2
{
  "mappings": {
    "test2":{
      "dynamic_templates":[
        {
          "named_analyzers":{
            "match_mapping_type":"string",
            "match":"*",
            "mapping":{"type":"string","analyzer":"{name}"}
          }
        },
        {
          "no_doc_values":{
            "match_mapping_type":"*",
            "mapping":{"type":"{dynamic_type}", "doc_values":false}
          }
        }
      ]
    }
  }
}

重写默认模板

可以重写所有索引的默认映射,也可以通过在索引模板中指定_default_类型映射重写映射类型。

示例:为了对所有新索引中的类型禁用_all字段,可以创建下面这样的索引模板:

PUT /_template/disable_all_field
{
  "disable_all_field":{
    "order":0,
    "template":"*",
    "mappings":{
      "_default_":{
        "_all":{
          "enabled":false
        }
      }
    }
  }
}
ES中的动态映射和动态模板 为了方便演示和切换 ES 地址,在 ~/.bashrc 中添加如下变量和脚本: ES=localhost:9200 escurl () { curl -H 'Content-Type: application/json' "$@"; } 复制代码 Elasticsearch 具有非常强大的动态性和灵活性,例如当向一个不存在的索引添加文档时,会自动创建该索引,例如: $ escurl -XPUT $ES/my_article/doc/1?pretty -d ' { "title": . 阅读详情

相关推荐

ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

程序员路同学 1851

Elasticsearch - 自动检测及动态映射Dynamic Mapping

一、自动映射:ES通过查看定义某文档的json格式就能猜测到文档结构,我们称之为自动映射,在开发过程中需要注意这些特性。字段自动检测在某个字段第一次出现时,如果之前没有定义过映射,ES会自动检测它可能满足的类型,然后创建对应的映射。JSON数据ES中的数据类型null不会添加字段true or falsebooleanfloating point numberdoubleintegerlongob

上善若水,水善利万物而不争。 3万+

异次元发卡最新漏洞0day(XSS组合拳)

异次元商店头像上传处存在存储型XSS注入(user、admin均存在)。其中,user处有过滤,admin无。 将恶意脚本插入后,管理员访问用户管理页面即可执行恶意脚本。 恶意脚本执行后,会新增一个管理员用户,进而获得权限。鉴于漏洞还没有泛滥,而且很多站都有漏洞。EXP暂时不公开。需要学习可以加入知识星球

白昼小丑的博客 4592

Elasticsearch的dynamic 与 index.mapper.dynamic

1. 说明 dynamic是用来设置某个type如何处理新增的字段(即字段的动态映射) index.mapper.dynamic 是用来设置是否可以动态生成type 2. 动态映射(dynamic) ES中有一个非常重要的特性——动态映射,即索引文档前不需要创建索引、类型等信息,在索引的同时会自动完成索引、类型、映射的创建。那么什么是映射呢?映射就是描述字段的类型、如何进行分析、如何进行索引等内容...

不见其长,日有所长 1588

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。

weixin_33738555的博客 432

TBtools的序列提取步骤

本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。

weixin_47509995的博客 1万+

elasticsearch插件安装(二)之dynamic-synonym插件

想要使用elasticsearch插件安装?本文将带你从0到1快速掌握插件安装的流程和开发技能

JavaGPT的博客 3153

ElasticSearch动态映射和静态映射及字段类型(第七章)

ElasticSearch 目前也算是非常火了,站内搜索、日志分析都会用到它,而且还可以直接当成 NoSQL 数据库来使用。 接下来,我们就通过下面这个简单介绍,开启 es 之旅吧~ 公众号 : 倔强小狮子 文章目录公众号 : 倔强小狮子1. 动态映射1.2 动态映射日期检测问题1.3 动态映射检测类型弊端2. 静态映射(关闭动态映射 =="建议关闭动态映射"==)3. 类型推断4. 核心类型4.1 字符串类型4.2 数字类型 1. 动态映射 1· 顾名思义,就是自动创建出来的映射。ElasticS.

braverlionet的博客 432

AI赋能合同审查:构建租赁合同智能审核系统的全流程解析

在商业地产、设备租赁等场景中,合同审核效率直接影响业务流转速度。传统人工审核存在三大痛点:审核周期长(平均2-3个工作日)、合规风险高(条款遗漏率约15%)、人力成本居高不下。智能审核系统可将审核时间压缩至秒级,风险识别准确率提升至98%以上。

理论都是虚的,代码才是王道。 1356

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 371

Setting index.mapper.dynamic was removed after version 6.0.0

ES5 升级到ES7 报错 Setting index.mapper.dynamic was removed after version 6.0.0 大概意思是 dynamic这个属性在建立index的时候不能指定了,需要删掉 如下: "mapper": { "dynamic": false }, 把这个删掉,然后建立index成功后,再去修改就可以了 ...

a984171281的博客 977

节省人力成本40%!仓储物流AI机器人调度系统实战案例(含路径规划算法与系统架构图)

首先,我们需要定义一个Node类self.x = x # 节点x坐标self.y = y # 节点y坐标self.g = g # 从起点到当前节点的实际成本(g值)self.h = h # 从当前节点到终点的启发式成本(h值)self.f = g + h # 总成本(f值)self.parent = None # 父节点(用于回溯路径)self.task_id = task_id # 任务IDself.priority = priority # 任务优先级(1=最高,5=最低)

小程序开发 950

Elasticsearch学习-ES中动态映射有什么用

在系统开发过程中,,随着业务不断发展和需求的不断迭代,业务系统中的原有数据表结构无法满足现有功能需求,这个时候常用的做法就是修改表结构,增加或者修改原有schema中的字段类型。与传统关系型数据相比,ES有一个明显的差异,就是可以在原有索引中添加新的字段数据,而无需做其他类似schema的调整。在关系型数据库中,表结构定义完毕后,只能在表中插入schema中指定的字段信息。而在ES中是可以打破这个限制的。...

weixin_45701550的博客 960

汇川Easy系列斜坡函数功能块(支持状态输出)

IN rSetValue REAL 0.000000 0.000000 不保持 目标值 1IN rMaxValue REAL 0.000000 0.000000 不保持 最大目标值 2IN rMinValue REAL 0.000000 0.000000 不保持 最小目标值 3IN rSmoothTime REAL 100.000000 100.0000 不保持 最小到最大值平滑时间 单位 秒 4IN diTs DINT 10 10 不保持 函数调用周期采样时间中断时间 5。

RXXW_Dor的博客 457

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ElasticSearch ES 全局映射 动态模板 文档映射 IK分词器 标准查询 DSL

认识ElasticSearch 1.为什么要使用ElasticSearch 虽然全文搜索领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。 实际项目中,我们建立一个网站或...

snailisBigbull的博客 1556

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【es】动态映射

2.直接添加数据检查类型。5.字段名称字段动态映射。3.开启数字的动态映射。

weixin_43346403的博客 347

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Elasticsearch】Elasticsearch动态映射与静态映射详解

Elasticsearch 是一个分布式搜索和分析引擎,广泛应用于实时数据分析和全文检索中。在使用 Elasticsearch 时,映射(Mapping)是定义索引中文档结构和字段类型的过程。映射主要分为动态映射和静态映射两种方式。本文将详细介绍这两种映射的区别及其在不同场景中的应用。映射是 Elasticsearch 中定义索引中文档结构、字段类型及其属性的过程。通过映射,Elasticsearch 可以理解数据的结构和类型,从而进行有效的存储和检索。

屿小夏.的知识博客 5万+

【Elasticsearch教程4】Mapping 动态映射

在实际企业开发中,都会提前设置好mapping的,不会完全让ES自动设置字段类型的。但是掌握好动态字段映射还是很重要的,是学习mapping的前提条件。在字段类型比较确定时,可以先设置好mapping,再插入数据,有新字段时,先给mapping添加新的字段设置在字段的个数和类型都不确定时,可以使用mapping的动态模板,按照已经指定的规则设置它的类型。比如某个字段名为int_age,就让类型为integer,字段名为就设为float。好好学习,天天向上,下一篇博客会写mapping的动态模板的内容。

Java Spring Elasticsearch 2419

ES 09 - 如何配置使用Elasticsearch的动态映射 (dynamic mapping)

目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping动态映射策略 2.1 约束策略 2.2 策略示例 3 定制dynamic mapping策略 3.1 date_detection - 日期识别策略 3.2 在type中自定义动态映射模板 3.3 [过期]在index中自定义默认映射模板 参考资料 写在前面: 本文涉及到的演示以ES 6.6.0版本, 其.

xiangjai的专栏 1813

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

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

weixin_30432007的博客 368

es映射--动态映射

Dynamic Mapping1. 概述2. 动态字段映射2.1 日期检查2.2 禁用日期检查2.3 自定义日期检查格式2.4 数字检查3. 动态模板 1. 概述 Elastisearch最重要的特征之一就是,它尝试跳出固有的方式,让你尽可能快地开始探索你的数据。为了索引一条文档,你不必先创建一个索引,然后定义字段和映射类型,你可以直接索引一条文档,索引,字段和字段类型会自动地被创建。 PUT data/_doc/1 { "count": 5 } 自动创建index索引,映射类型为_doc,并且有一个

weixin_42237702的博客 843

es 动态映射

字段映射规则: JSON datatype Elasticsearch datatype null No field is added. trueorfalse booleanfield floatingpointnumber fl...

hyhanyu的博客 1323

elasticsearch 动态映射

在以上实战中,对应第一种情况,Object对象可以添加新的属性,添加了last字段。举例:string类型匹配为text和keyword两种类型,但实际用户极有可能只期望排序和聚合的keyword类型,或者只需要存储text类型,如网页正文内容只需要全文检索,不需要排序和聚合操作。答:boolean类型、float类型、long类型、Object类型、Array类型、date类型、字符串类型。获取映射发现,create_date是text和keyword组合类型,不是我们期望的date类型。

batman 1210

ES动态映射导致的线上疑案

一. 事件背景 在凤巢的推广平台中,有对物料进行不同属性进行筛选排序的需求,由于物料的量级很大(单用户千万级物料),并且有根据物料关键词搜索和某些特定值搜索,所以需要一个全文检索的搜索引擎来满足物料筛选的需求。ElasticSearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。由于它的实时搜索,稳定,可靠,快速,凤巢业务端利用...

zhoxing 1468
上一篇: Elasticsearch--映射参数(二)
下一篇: SpringData--Elasticsearch
吴声子夜歌
博客等级 码龄9年 2687粉丝 2268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值