solr提供了DIH并集成tika,因此配置db、文档索引都会感觉到非常方便,但是如果你的业务要求你的程序必须能在友好的UI中配置DB导入,程序员刚上来难免一脸蒙逼了。
基于solr的DB导入管理功能的开发首先要解决解决以下三个问题(本篇主要针对2进行介绍):
1、solr服务的代理调用
2、solr配置文件的远程操作
3、solr配置文件的结构化读写
新增数据库表的导入需要对db-data-config.xml、schema.xml等文件中的内容进行动态修改、重新载入并执行dataimport使其生效。那么问题来了,solr服务与应用不在一个物理主机上,应用该如何操作远程的配置?你可能会有以下思路:
1、在solr服务器上搭建文件服务
2、研究solr http rest api,试图找到其对配置修改并重载的方法,并保留对solr进行扩展的极端手段
3、使用solr内置的zookeeper服务
让我们逐一分析以上思路的利弊:
1、需额外增加服务,应用需增加针对该文件服务的工具引入和对应代码,如果后期搭建solr集群,会使文件管理变得非常复杂,果断pass。
2、个人没有找到写配置的rest api,扩展solr可对单节点solr服务有良好支持,但对于solrcloud仍是噩梦,继续pass。
3、solr内置zookeeper服务,zk也是solrcloud分布式配置的实现,zk提供易用的节点操作的java api,此方案在实现复杂度、扩展性、兼容性方面均占据绝对优势,果断选取。
选定方案后,思路变得清晰了。zookeeper节点的远程操作,需要zookeeper.jar工具包支持,增加读写操作如下:
byte[] bytes = zooKeeper.getData(path , null, null);//读
zooKeeper.setData(path, bytes , -1);//写
操作详见zookeeper api
于是配置文件的远程操作则大功告成了!
但是!应注意以下问题
1、读写操作应注意规避系统默认编码问题
2、solr zk后续启动不要覆盖已维护的配置