|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.Elasticsearch的坑爹事
本文纪录一次Elasticsearchmappingfield修正历程
团队利用Elasticsearch做日记的分类检索剖析服务,利用了相似以下的_mapping
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"settings":{
"number_of_shards":20
},
"mappings":{
"client":{
"properties":{
"ip":{
"type":"long"
},
"cost":{
"type":"long"
},
}
如今成绩来了,日记中输入的"127.0.0.1"这类的IP地点在Elasticsearch中是不克不及转化为long的(报错Java.lang.NumberFormatException),以是我们必需将字段改成string型大概ip型(Elasticsearch撑持,数据范例可见mapping-core-types)才干到达幻想的效果.
方针明白了,就是改失落mapping的ip的fieldtype便可.
elasticsearch.org找了一圈嘿嘿,update一下便可
1
2
3
4
5
6
7
8
curl-XPUTlocalhost:8301/store/client/_mapping-d
{
"client":{
"properties":{
"local_ip":{"type":"string","store":"yes"}
}
}
}
报错了局
1
{"error":"MergeMappingException[Mergefailedwithfailures{[mapper[local_ip]ofdifferenttype,current_type[long],merged_type[string]]}]","status":400}
尼玛真逗我long想转一下string竟然失利(elasticsearch产物层面理应撑持这类无损转化)无果
Google了一下相似的案例(案例)
在一个帖子中失掉的elasticsearch开辟职员的正确回复
"Youcantchangeexistingmappingtype,youneedtocreateanewindexwiththecorrectmappingandindexthedataagain."
想一想略坑啊我不论是由于elasticsearch仍是由于底层Lucene的缘故原由,修正一个field必要对一切已无数据的一切field举行reindex,这自己就是一个逆天的思绪,可是elasticsearch的研发职员还以为这没有甚么分歧理的.
在Elasticsearch下游逛了一圈,下面如许写到
(http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/)
theproblem — whyyoucan’tchangemappings
Youcanonlyfindthatwhichisstoredinyourindex.Inordertomakeyourdatasearchable,yourdatabaseneedstoknowwhattypeofdataeachfieldcontainsandhowitshouldbeindexed.Ifyouswitchafieldtypefrome.g.astringtoadate,allofthedataforthatfieldthatyoualreadyhaveindexedbecomesuseless.Onewayoranother,youneedtoreindexthatfield.
...
OK,这一段话很公道,我改了一个field的范例必要对这个field举行reindex,如论哪一种数据库都必要这么做,没错.
我们再持续往下看看,reindexingyourdata,尼玛一看,弱爆了,他的reindexingyourdata不是对修正的filed举行reindex,而是创立了一个新的index,对一切的filed举行reindexing,太逆天了。
吐槽回吐槽,这个事变逃不了,那我就按他的来吧.
起首创立一个新的索引
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl-XPUTlocalhost:8305/store_v2-d
{
"settings":{
"number_of_shards":20
},
"mappings":{
"client":{
"properties":{
"ip":{
"type":"string"
},
<p>"cost" |
|