网站编辑转行做文案,一个人免费看的高清电影在线观看,网站制作一般多少钱,网站开发排行榜概念 
在 Elasticsearch 中#xff0c;映射#xff08;Mapping#xff09;定义了索引中字段的类型和属性。它是索引数据结构的基础#xff0c;类似于传统数据库中的表结构定义。映射不仅定义了字段的类型#xff08;如 text、keyword、integer 等#xff09;…概念 
在 Elasticsearch 中映射Mapping定义了索引中字段的类型和属性。它是索引数据结构的基础类似于传统数据库中的表结构定义。映射不仅定义了字段的类型如 text、keyword、integer 等还定义了字段的分析器、是否存储、是否索引等属性。映射是 Elasticsearch 中定义索引字段类型和属性的重要概念。通过显式定义映射你可以控制字段的类型、分析器和其他属性从而更好地管理和优化索引数据。动态映射则提供了灵活性使得在没有显式映射的情况下也能插入数据。 
映射的基本概念 字段类型Elasticsearch 支持多种字段类型包括文本text、关键字keyword、整数integer、浮点数float、日期date、布尔boolean等。  分析器对于文本字段可以指定分析器Analyzer用于在索引和搜索时对文本进行分词和处理。  多字段一个字段可以有多个子字段Multi-fields每个子字段可以有不同的类型和分析器。  动态映射如果没有显式定义映射Elasticsearch 可以根据插入的数据自动推断字段类型这称为动态映射Dynamic Mapping。  
动态映射规则 
动态映射Dynamic Mapping是 Elasticsearch 中一个非常强大的功能它允许 Elasticsearch 根据插入的数据自动推断字段类型从而简化索引的创建和管理。Elasticsearch 使用一组预定义的规则来推断字段类型这些规则称为动态映射规则。 
以下是 Elasticsearch 中一些常见的动态映射规则 
1. 字符串String    - 如果字符串包含日期格式Elasticsearch 会将其推断为 date 类型。    - 如果字符串包含数字格式Elasticsearch 会将其推断为 float 或 long 类型。    - 否则Elasticsearch 会将其推断为 text 类型并为其创建一个子字段 keyword 类型。 
2. 数字Number    - 如果字段值是整数Elasticsearch 会将其推断为 long 类型。    - 如果字段值是浮点数Elasticsearch 会将其推断为 float 类型。 
3. 布尔Boolean    - 如果字段值是 true 或 falseElasticsearch 会将其推断为 boolean 类型。 
4. 对象Object    - 如果字段值是一个 JSON 对象Elasticsearch 会将其推断为 object 类型。 
5. 数组Array    - 如果字段值是一个数组Elasticsearch 会根据数组中的第一个元素类型来推断字段类型。 
6. 日期Date    - 如果字段值是一个日期字符串Elasticsearch 会将其推断为 date 类型。 
示例 
假设你插入以下文档到 Elasticsearch PUT /my_index/_doc/1
{name: John Doe,age: 30,is_active: true,created_at: 2023-10-01T12:00:00Z,tags: [elasticsearch, mapping]
}  Elasticsearch 会根据动态映射规则推断以下字段类型 
nametext 类型并为其创建一个子字段 keyword 类型。agelong 类型。is_activeboolean 类型。created_atdate 类型。tagskeyword 类型因为数组中的元素是字符串。 
控制动态映射 
你可以通过设置索引的动态映射策略来控制动态映射的行为。以下是一些常见的动态映射策略 
1. **true**启用动态映射默认。 2. **false**禁用动态映射忽略新字段。 3. **strict**如果遇到新字段抛出异常。 
例如禁用动态映射 PUT /my_index
{mappings: {dynamic: false}
}  
动态映射规则是 Elasticsearch 自动推断字段类型的一组预定义规则。通过了解这些规则你可以更好地理解和控制 Elasticsearch 如何处理新字段。动态映射提供了灵活性使得在没有显式映射的情况下也能插入数据但有时也需要通过设置动态映射策略来控制其行为。在生产环境中为了确保数据的结构和类型一致性以及避免潜在的性能问题和数据不一致强烈建议显式定义索引的映射。 
问题 
版本开发中业务场景需求增加字段disposalstatus 升级包中增加了该字段数据模型的SQL语句由于在升级版本的过程中升级的时候未先更新数据模型未先新增字段映射导致接入数据时ES采用了动态映射的方式进行了数据的写入然后再升级数据模型和ES索引mapping更新时索引中字段已新增并且字段类型不一致触发了报错 [2024-08-02T17:37:59,956][DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] [HOxfa0m] failed to put mappings on indices [[[alert_trace_v0/htU57CoYTQeLgs9Cxo2Mvg]]], type [alert_trace]
java.lang.IllegalArgumentException: mapper [disposalstatus] of different type, current_type [text], merged_type [keyword]at org.elasticsearch.index.mapper.FieldMapper.doMerge(FieldMapper.java:354) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.TextFieldMapper.doMerge(TextFieldMapper.java:876) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.FieldMapper.merge(FieldMapper.java:340) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.FieldMapper.merge(FieldMapper.java:52) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.ObjectMapper.doMerge(ObjectMapper.java:487) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.RootObjectMapper.doMerge(RootObjectMapper.java:278) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.ObjectMapper.merge(ObjectMapper.java:457) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.RootObjectMapper.merge(RootObjectMapper.java:273) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.Mapping.merge(Mapping.java:91) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.index.mapper.DocumentMapper.merge(DocumentMapper.java:339) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.applyRequest(MetaDataMappingService.java:273) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.execute(MetaDataMappingService.java:231) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:643) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:270) ~[elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:200) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:135) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:708) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:252) [elasticsearch-6.8.23.jar:6.8.23]at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:215) [elasticsearch-6.8.23.jar:6.8.23]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_332]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_332]at java.lang.Thread.run(Thread.java:750) [?:1.8.0_332]  
问题一出现这个错误会影响数据的写入吗 
在Elasticsearch中当你遇到类似 [DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] ... failed to put mappings ... mapper [disposalstatus] of different type, current_type [text], merged_type [keyword] 的错误时这意呀着你尝试更改一个已存在字段在这个例子中是 disposalstatus的类型但是Elasticsearch不允许直接更改已索引字段的类型。 
关于为什么这个错误“不会影响 disposalstatus 字段的写入”这主要是因为Elasticsearch在写入数据时不会重新评估或更改字段的映射。一旦数据被索引它就被存储为与当时字段映射相匹配的形式。因此即使你尝试更改映射并失败了已经存在的数据包括 disposalstatus 字段仍然保持原样并且新的写入操作如果它们遵循现有的映射仍然可以成功进行。 
然而这并不意味着你可以随意写入与当前映射不匹配的数据类型到 disposalstatus 字段。如果字段的当前类型是 text并且你尝试写入一个 data 类型注意Elasticsearch中没有内置的 data 类型我猜测你可能是指的复杂数据类型如 object、array 或其他JSON兼容类型或 boolean 类型Elasticsearch将尝试将这些数据转换为与字段映射兼容的形式。 对于 boolean 类型如果 disposalstatus 字段是 text 类型并且你尝试写入一个布尔值如 true 或 falseElasticsearch将把这些值作为字符串处理并存储在索引中。虽然查询时可能需要特别注意类型转换但写入操作本身通常是成功的。  对于复杂数据类型如 object 或 array如果 disposalstatus 字段是 text 类型并且你尝试写入一个对象或数组Elasticsearch的行为将取决于你的Elasticsearch版本和配置。在某些情况下它可能会尝试将这些对象或数组转换为字符串例如通过JSON序列化但这通常不是最佳实践因为这会丢失结构信息并使查询变得复杂。在较新的Elasticsearch版本中尝试写入不兼容类型的数据可能会导致错误。  
总之错误 mapper [disposalstatus] of different type 不会影响已经存在的 disposalstatus 字段的写入只要写入的数据类型与当前映射兼容但它会阻止你更改字段的类型。如果你需要存储不同类型的数据你应该考虑创建一个新字段并在写入新数据时同时更新这两个字段。此外对于复杂数据类型和布尔值你应该确保字段的映射与你要存储的数据类型相匹配。 问题二数据可以正常写入但是能正常的查询排序聚合等操作吗 Fielddata is disabled on text fields by default. Set fielddatatrue on [disposalstatus] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.  
在Elasticsearch中fielddata 默认在 text 类型的字段上是禁用的。fielddata 是一种将数据从磁盘上的倒排索引inverted index加载到内存中以便进行排序、聚合、脚本执行等操作的功能。但是由于 text 字段通常包含大量文本如果启用 fielddata可能会消耗大量内存影响Elasticsearch集群的性能和稳定性。 
错误信息中提到“Fielddata is disabled on text fields by default. Set fielddatatrue on [disposalstatus] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.” 是在告诉你几个关键点 
默认禁用text 字段上的 fielddata 默认是禁用的。启用fielddata如果你确实需要在 disposalstatus 字段上使用 fielddata比如进行排序或聚合操作你可以在字段映射中设置 fielddatatrue。但是这可能会消耗大量内存。使用keyword字段作为替代方案你可以将 disposalstatus 字段的类型更改为 keyword。keyword 类型的字段天然支持 fielddata因为它们通常用于存储不需要全文搜索的精确值如标签、枚举值等。 
为什么使用 keyword 字段 
内存使用keyword 字段的 fielddata 消耗的内存通常比 text 字段少因为 keyword 字段不包含分词tokenization和索引indexing过程中产生的额外信息。性能对于排序、聚合和脚本等需要 fielddata 的操作keyword 字段通常能提供更好的性能。用途keyword 字段非常适合存储不需要全文搜索的精确字符串值。 
如何更改字段类型 
如果你需要更改 disposalstatus 字段的类型从 text 到 keyword并且该字段尚未包含大量数据你可以通过以下步骤进行 更新映射使用Elasticsearch的映射API来更新索引的映射将 disposalstatus 字段的类型更改为 keyword。但是请注意直接更改已存在字段的类型通常是不允许的。因此你可能需要 删除索引并重新创建它包含新的映射。或者如果可能的话使用别名alias和索引滚动更新rolling updates来最小化停机时间。在某些情况下如果Elasticsearch版本和配置允许你可以使用索引模板来为新文档设置新的字段类型但已存在的文档不会受到影响。 重新索引数据如果需要如果你选择了删除并重新创建索引的方法你需要将旧索引中的数据重新索引到新索引中。  验证更改在更改生效后验证新索引和映射是否符合预期并确保应用程序可以正确地与新的索引和映射交互。  
请注意在进行此类更改之前最好先在测试环境中验证更改的影响。 建议 
在生产环境中为了确保数据的结构和类型一致性以及避免潜在的性能问题和数据不一致强烈建议显式定义索引的映射设置索引的动态映射策略为禁用动态映射忽略新字段。针对出现的字段映射不一致的问题采用重建索引reindex的方式进行修正避免出现存储查询排序聚合等错误。 文章转载自: http://www.morning.ptysj.cn.gov.cn.ptysj.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.rqzyz.cn.gov.cn.rqzyz.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.rlkgc.cn.gov.cn.rlkgc.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.hrdx.cn.gov.cn.hrdx.cn http://www.morning.jhwwr.cn.gov.cn.jhwwr.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.mhpkz.cn.gov.cn.mhpkz.cn http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn http://www.morning.rbmnq.cn.gov.cn.rbmnq.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.qnftc.cn.gov.cn.qnftc.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.tktcr.cn.gov.cn.tktcr.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.dodoking.cn.gov.cn.dodoking.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.nwqyq.cn.gov.cn.nwqyq.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.fdfdz.cn.gov.cn.fdfdz.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.nzklw.cn.gov.cn.nzklw.cn http://www.morning.lxwjx.cn.gov.cn.lxwjx.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.txlnd.cn.gov.cn.txlnd.cn http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.jncxr.cn.gov.cn.jncxr.cn http://www.morning.jczjf.cn.gov.cn.jczjf.cn http://www.morning.tcxk.cn.gov.cn.tcxk.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.mszwg.cn.gov.cn.mszwg.cn http://www.morning.wbns.cn.gov.cn.wbns.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.wxwall.com.gov.cn.wxwall.com http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn http://www.morning.krbjb.cn.gov.cn.krbjb.cn http://www.morning.snbrs.cn.gov.cn.snbrs.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.zztkt.cn.gov.cn.zztkt.cn http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn http://www.morning.llxqj.cn.gov.cn.llxqj.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.geledi.com.gov.cn.geledi.com http://www.morning.sdhmn.cn.gov.cn.sdhmn.cn http://www.morning.cttgj.cn.gov.cn.cttgj.cn http://www.morning.lywpd.cn.gov.cn.lywpd.cn http://www.morning.kdlzz.cn.gov.cn.kdlzz.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.dljujia.com.gov.cn.dljujia.com http://www.morning.wscfl.cn.gov.cn.wscfl.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.fllfz.cn.gov.cn.fllfz.cn http://www.morning.xsctd.cn.gov.cn.xsctd.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.nmlpp.cn.gov.cn.nmlpp.cn http://www.morning.bgnkl.cn.gov.cn.bgnkl.cn http://www.morning.flfxb.cn.gov.cn.flfxb.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn