solr 将field字段的fieldtype由string修改成date

菜鸟日志:记录在面对需求时我的解决办法,欢迎各位指正,学习交流。

solr 将字段(field)的类型(fieldtype)由string修改成date

需求:

已存在索引库,但是其中某个字段ADDTIME的f配置文件如下:

<field name="ADDTIME" type="string" indexed="true" stored="true" multiValued="false" />

现因业务需要将改成如下:

<field name="ADDTIME" type="date" indexed="true" stored="true" multiValued="false" />

并且有如下要求:原来的索引数据不能丢失,(数据库已经没有原始数据库了)也就是说不能索引重建。

       思考&&解决过程:

      1. 直接更改schemal.xml配置文件类型然后重启solr,经过测试不行:这样由于string和date的格式不一样索引会报错。  
      2. 直接更新索引字段中ADDTIME的值使其符合DATE类型的要求的格林威治时间(不了解网上可以搜)的格式。但是这样也不行。因此得出结论索引中string不可能直接转换成date的格式,无论它的值符不符合。
      3. 最后解决办法如下:
              首先增加一个字段ADDTIMETEMP(修改schemal.xml然后重启solr)利用solrj读出ADDTIME中的值转换成date的格式插入ADDTIMETEMP中,其中需要利用solr的原子操作

<span style="font-size:18px;">        SolrInputDocument ddd = new SolrInputDocument();</span>

<span style="font-size:18px;">        ddd.addField("ID", ID);	 </span>

<span style="font-size:18px;">        HashMap setOper = new HashMap<String,String>();</span>

<span style="font-size:18px;">        setOper.put("set", ADDTIME); </span>

<span style="font-size:18px;">        System.out.print(setOper);</span>

<span style="font-size:18px;">        ddd.addField("ADDTIME", setOper);</span>

              根据ID主键的作用来更新每个ADDTMETEMP的值与ADDTIME一样但ADDTMETEMP的类型是date

               然后删除ADDTIME字段,过程是先利用原子操作将其值为空,然后在配置文件中直接删除就可以了。

               再增加ADDTIME字段(修改schemal.xml然后重启solr)其类型为date,再走一遍上述的操作将ADDTIMETEMP值更新到ADDTIME然后删除ADDTIMETEMP 最后重启即可

总结:

总的来说也就是在过程中增加一个临时的过度字段,以为solr的配置文件中字段不能重名,类型也不能直接转所以迂回解决了一下。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值