Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办??
这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping。你可能会问,这要是在生产环境,可行吗?答案是,如果你一开始就采取了合适的设计,这个完全是可以做到平滑过渡的。
采取什么合理设计呢?就是我们的程序访问索引库时,始终使用同义词来访问,而不要使用真正的indexName。在reindex完数据之后,修改之前的同义词即可。明白了吗?
参考上面的思路,我们来一步一步做。
step1、创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。
step2、创建一个指向本索引的同义词。
curl -XPOST localhost:9200/_aliases -d ' { "actions": [ { "add": { "alias": "my_index", "index": "my_index_v1" }} ] } '
此时,你可以通过同义词my_index访问。包括创建索引,删除索引等。
step3,需求来了,需要更改mapping了,此时,你需要创建一个新的索引,比如名称叫my_index_v2(版本升级).,在这个索引里面创建你新的mapping结构。然后,将新的数据刷入新的index里面。在刷数据的过程中,你可能想到直接从老的index中取出数据,然后更改一下格式即可。如何遍历所有的老的index数据,请参考这里。
step4,修改同义词。将指向v1的同义词,修改为指向v2。http接口如下:
curl -XPOST localhost:9200/_aliases -d ' { "actions": [ { "remove": { "alias": "my_index", "index": "my_index_v1" }}, { "add": { "alias": "my_index", "index": "my_index_v2" }} ] } '
step5,删除老的索引。
curl -XDELETE localhost:9200/my_index_v1
除此之外,还有几个其他的方法也可以更改mapping。
1、修改程序,添加字段。
就是说,你可以在mapping中增加一个新的字段,然后你对新的字段进行访问统计搜索。这个就要修改两个地方,一个是修改mapping增加字段,还有就是修改你的程序,把字段改成新的字段。
2、更改字段类型为multi_field。
multi_field允许为一个字段设置多个数据类型。应用multi_field的一个最典型的场景是:一个类型定义为analyed,这个字段可以被搜索到,一个类型定义为不分词,这个字段用于排序。
任何字段都可以被更新为multi_field(类型为object和nested的类型除外)。假设现在有一个字段,名字叫created,类型现在为string。
{ "created": { "type": "string"} }
我们可以将它增加一种类型,使他既能被当做字符串又能当做日期型。
curl -XPUT localhost:9200/my_index/my_type/_mapping -d ' { "my_type": { "properties": { "created": { "type": "multi_field", "fields": { "created": { "type": "string" }, "date": { "type": "date" } } } } } } '
采用标准的重建索引方式的时候,我们推荐大家为每一个type都建立一个索引同义词,即便在同一个索引库中的多个type,也推荐使用建立一个同义词来访问。即一个index里面包含一个type,因为在elasticsearch中,跨index查询数据是很方便的。这样,我们就可以在reindex一个type后,立即将type生效,而不是将index下面所有的type都重建完后,同义词才能生效。
相关推荐
在本文中,我们将深入探讨如何使用Spring Boot与Elasticsearch 7.6.2进行基本操作,包括创建索引、添加数据以及查询数据。Elasticsearch是一个强大的分布式搜索引擎,而Spring Boot是Java开发中的轻量级框架,两者...
Elasticsearch reindex 修改索引定义、设置、备份索引数据、跨集群数据迁移,reindex使用介绍
而标题中提到的"一款基于Java注解的elasticsearch mapping生成工具",正是针对这一需求,为开发者提供了一种简洁且高效的方式来创建和管理ES的映射。 **Java注解与Elasticsearch Mapping** Java注解是一种元数据,...
同时,确保正确安装和启动Elasticsearch服务,并根据需求调整索引设置,如分词器的选择、映射的定义等。 在压缩包文件`elsauto`中,可能包含了示例代码、配置文件或测试用例,可以帮助我们更好地理解和实现上述功能...
elasticsearch 同义词创建索引实例
arcgis elasticSearch es 矢量数据导入插件 数据建模 mapping indexsetting 字段映射 索引建模支持geoshape、shape,text索引支持keyword/ngram/edgeNgram/ikSmart,快速导入,兼容multipolygon,带洞,多面,使用时...
ElasticSearch映射生成器该工具允许在创建索引时为索引生成映射或设置。 使用注释描述定义的映射字段安装二进制文件部署在Maven Central上,您可以将工件导入到您的项目中: < dependency> < groupId>...
在IT行业中,日志管理是系统维护和故障排查的关键环节,而Elasticsearch(简称ES)作为一款强大的全文搜索引擎,常被用来存储和分析大量日志数据。然而,随着日积月累,这些数据可能会变得非常庞大,如果不进行有效...
这个"elasticsearch服务器安装包"包含了一个用于部署Elasticsearch服务的jar包,以及可能的配置文件和其他相关组件。 在安装Elasticsearch之前,我们需要了解一些基本概念和步骤: 1. **Java运行环境**:Elastic...
lasticsearch整合分词、创建索引、搜索例子,elasticsearch版本为1.0,索引数据从数据表中动态读取生成,有关键字高亮效果,查询分页 1 在dababase目录中导致相关的数据库文件,修改DBCOperation java文件数据库连接...
这是因为从7.x版本开始,Elasticsearch不再支持多映射(multi-mapping),每个索引只能有一个映射。 4. **实际应用**: - 示例中的索引文件是针对房屋信息的,包含了房屋ID、标题、价格、面积、创建时间、更新时间...
Elasticsearch-深入理解索引原理 Elasticsearch 中索引(Index)的概念是非常重要的,它是 Elasticsearch 存储数据的基本单元。索引是一个具有类似特性的文档的集合,类比传统的关系型数据库领域来说,索引相当于 ...
Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛用于大数据的实时分析和检索。在本讲座中,我们将深入探讨Elasticsearch中的索引概念及其重要性。 首先,让我们理解一下ES中的“索引”...
以脚本方式创建es 索引和结构映射. 莎士比亚在不经意间这样说过,本来无望的事,大胆尝试,往往能成功。我希望诸位也能好好地体会这句话。 一般来讲,我们都必须务必慎重的考虑考虑。 就我个人来说,我秃头了对我的...
另一个文件`es配置修改.txt`可能是关于如何调整Elasticsearch配置以优化备份性能的指南。可能的修改包括: - **设置更大的堆内存**:备份大量数据时,可能需要增加Elasticsearch进程的堆内存限制。 - **调整线程池...
Elasticsearch 是一个基于 Lucene 的搜索引擎,它提供了全文搜索的功能,并且可以用于处理各种数据。下面是一个简单的 Elasticsearch 使用 ...如果您的 Elasticsearch 服务配置有所不同,您需要相应地修改连接设置。
elasticsearch5.5.1的javaapi,含创建索引、mapping、查询、增加删除文档
Elasticsearch是一个开源的全文搜索引擎,它以分布式、RESTful服务的方式提供快速、高可用、可扩展的数据搜索和分析能力。这个"elasticsearch-7.4.0-win64.rar"压缩包包含了Elasticsearch 7.4.0版本的Windows 64位...
索引插件是Elasticsearch生态系统中的重要组成部分,它们扩展了Elasticsearch的功能,提供了更多管理和操作索引的便利性。"plugin-head"是其中一款知名的插件,主要用于提供一个直观的Web界面,帮助用户更轻松地管理...