elasticsearch更改mapping(不停服务重建索引)

标签: elasticsearch mapping 服务 | 发表时间:2015-11-19 14:31 | 作者:
出处:http://m635674608.iteye.com

Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办??

这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping。你可能会问,这要是在生产环境,可行吗?答案是,如果你一开始就采取了合适的设计,这个完全是可以做到平滑过渡的。

采取什么合理设计呢?就是我们的程序访问索引库时,始终使用同义词来访问,而不要使用真正的indexName。在reindex完数据之后,修改之前的同义词即可。明白了吗?

 

参考上面的思路,我们来一步一步做。

step1、创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。

step2、创建一个指向本索引的同义词。

Java代码   收藏代码
  1. curl -XPOST localhost:9200/_aliases -d '  
  2. {  
  3.     "actions": [  
  4.         { "add": {  
  5.             "alias": "my_index",  
  6.             "index": "my_index_v1"  
  7.         }}  
  8.     ]  
  9. }  
  10. '  

 

 此时,你可以通过同义词my_index访问。包括创建索引,删除索引等。

 

step3,需求来了,需要更改mapping了,此时,你需要创建一个新的索引,比如名称叫my_index_v2(版本升级).,在这个索引里面创建你新的mapping结构。然后,将新的数据刷入新的index里面。在刷数据的过程中,你可能想到直接从老的index中取出数据,然后更改一下格式即可。如何遍历所有的老的index数据,请参考 这里

step4,修改同义词。将指向v1的同义词,修改为指向v2。http接口如下:

Java代码   收藏代码
  1. curl -XPOST localhost:9200/_aliases -d '  
  2. {  
  3.     "actions": [  
  4.         { "remove": {  
  5.             "alias": "my_index",  
  6.             "index": "my_index_v1"  
  7.         }},  
  8.         { "add": {  
  9.             "alias": "my_index",  
  10.             "index": "my_index_v2"  
  11.         }}  
  12.     ]  
  13. }  
  14. '  

 step5,删除老的索引。

Java代码   收藏代码
  1. 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。

Java代码   收藏代码
  1. {     "created": { "type": "string"} }  

 我们可以将它增加一种类型,使他既能被当做字符串又能当做日期型。

Java代码   收藏代码
  1. curl -XPUT localhost:9200/my_index/my_type/_mapping -d '  
  2. {  
  3.     "my_type": {  
  4.         "properties": {  
  5.             "created": {  
  6.                 "type":   "multi_field",  
  7.                 "fields": {  
  8.                     "created": { "type": "string" },  
  9.                     "date":    { "type": "date"   }  
  10.                 }  
  11.             }  
  12.         }  
  13.     }  
  14. }  
  15. '  

 

采用标准的重建索引方式的时候,我们推荐大家为每一个type都建立一个索引同义词,即便在同一个索引库中的多个type,也推荐使用建立一个同义词来访问。即一个index里面包含一个type,因为在elasticsearch中,跨index查询数据是很方便的。这样,我们就可以在reindex一个type后,立即将type生效,而不是将index下面所有的type都重建完后,同义词才能生效。

http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [elasticsearch mapping 服务] 推荐:

[译]elasticsearch mapping

- - an74520的专栏
es的mapping设置很关键,mapping设置不到位可能导致索引重建. 请看下面各个类型介绍^_^. 每一个JSON字段可以被映射到一个特定的核心类型. JSON本身已经为我们提供了一些输入,支持 string,  integer/ long,  float/ double,  boolean, and  null..

elasticsearch更改mapping(不停服务重建索引)

- - zzm
Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段. 但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了. 这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping.

elasticsearch文档-字段的mapping

- - 开源软件 - ITeye博客
elasticsearch文档-字段的mapping. Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types"的documents,ES允许每个mapping type关联多个mapping定义.

【翻译】用 elasticsearch 和 elasticsearch 为数十亿次客户搜索提供服务

- - IT技术博客大学习
标签:   elasticsearch   elasticsearch   搜索.    原文地址: http://www.elasticsearch.org/blog/using-elasticsearch-and-logstash-to-serve-billions-of-searchable-events-for-customers/.

Elasticsearch as Database - taowen - SegmentFault

- -
【北京上地】滴滴出行基础平台部招聘 Elasticsearch 与 Mysql binlog databus 开发工程师. 内推简历投递给: taowen@didichuxing.com. 推销Elasticsearch. 时间序列数据库的秘密(1)—— 介绍. 时间序列数据库的秘密(2)——索引.

ElasticSearch 2 的节点调优(ElasticSearch性能)

- - 行业应用 - ITeye博客
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目:. 打算建立多少索引,支持多少应用. elasticsearch版本: elasticsearch-2.x. 需要回答的问题远不止以上这些,但是第五个问题往往是容易被我们忽视的,因为单个ElasticSearch集群有能力支持多索引,也就能支持多个不同应用的使用.

elasticsearch的javaAPI之query

- - CSDN博客云计算推荐文章
elasticsearch的javaAPI之query API. the Search API允许执行一个搜索查询,返回一个与查询匹配的结果(hits). 它可以在跨一个或多个index上执行, 或者一个或多个types. 查询可以使用提供的 query Java API 或filter Java API.

Elasticsearch基础教程

- - 开源软件 - ITeye博客
转自:http://blog.csdn.net/cnweike/article/details/33736429.     Elasticsearch有几个核心概念. 从一开始理解这些概念会对整个学习过程有莫大的帮助.     接近实时(NRT).         Elasticsearch是一个接近实时的搜索平台.

ElasticSearch索引优化

- - 行业应用 - ITeye博客
ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡. 所以从上我可以通过索引的settings进行第一优化:. 这两个参数第一是到tranlog数据达到多少条进行平衡,默认为5000,而这个过程相对而言是比较浪费时间和资源的. 所以我们可以将这个值调大一些还是设为-1关闭,进而手动进行tranlog平衡.

elasticsearch集群搭建

- - zzm
之前对于CDN的日志处理模型是从 . 下面先是介绍几个关于elasticsearch的几个名词 . 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的. es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的.