就在今天刚过中午,部门经理让我处理一下一个部署项目的solr索引与实际数据不符合的问题,我们的系统在主页面用了solr进行加载,在数据库中有两篇文章是已经删除了的,而在系统主页还在展示,之前我处理过好几次这种问题,于是我轻车熟路的去检查了一遍数据库和solr的差异数据,随后到服务器上将主系统重新启动(公司内部系统)按照系统业务,在系统启动后应该更新索引,在启动完成后我检查页面发现还存在那两篇文章(现在它俩还不让我那么激动)于是我重启了solr服务再检查一遍,发现还有真是顽固不堪,我只能使出我的必杀技了:删索引,正是这一步导致了我半个下午的暴躁。
如图我先去solr里看了一下服务,没发现有什么异常,随后脑残的我就执行了删除索引命令
再次吐槽我怎么会如此操作,更过分的是我居然没有备份。
在我删除索引后我进行了服务重启,这次我万分自信的准备去写我的页面,然后.....页面空白,对,主页面一片空白所有之前的文章全都不见了,我有一点慌了,随后我去solr的query里进行查询,OMG,一条索引都没有了,但是不慌,我相信是服务没好,我重跑啊重跑,最后我认命了,看怎么解决吧。
在我询问经理及总监无果后只能靠我自己了,网上没有solr如何恢复索引,有也是之前备份好的,我再次吐槽我删库不备份的操作。(PS:在日常开发我经常会备份)
因为solr索引的数据是有依可循的,还好我们还可以操作添加,于是我提交了一篇文章,我到solr里看它的格式,它的格式是一个json(如果小伙伴们想直接操作solr可以执行把json打到Documents的json框里就可以新增了)大概是这样的:
但是各位不要把version和checkUsed加进去,那个是自己生成的。
既然已经知道了索引的格式,我就粘贴复制到Documents里测试添加一个
好,添加成功,既然知道了索引格式,那我们就可以去找源数据进行重新生成,此时的我很开心。
我先把这条数据删掉,这次我用了正确的删除方法
<delete><id>275bc7c6-7da3-410d-8d49-fe1461cd967b</id></delete>
<commit/>
删除之后去数据库找对应索引的字段,在我辛辛苦苦搜集到了所有的字段后我将他们执行输出
按照输出的数据跟上面的新增步骤我成功了在系统中展示了出来,随后我又发现了问题,没有附件,我真命苦。
我又新增了一个有附件的方案,看到格式我放弃了,就是下面的看不懂的nn
在我绝望时,我想起来我们提交的时候会创建或者更新索引,于是我把我自己的一个方案从数据库将状态改为未提交进行重新提交,中间的步骤就不说了,反正在solr里是重新有了,虽然这样不太好,但是这已经是当下我最方便的了,如果有大神知道怎么恢复请私信或评论,膜拜大佬们。
写此文章 以示警戒!