一直以来,使用Solr同步数据库数据作为GIS地图的数据使用,因为地图使用的数据源经常变动,且字段也会变动,所以,就开始使用Solr作为地图接入数据的中间件使用;
使用Solr接入过MySql、Oracle、PostgreSql、DB2等一系列的结构化数据库;
突然有一天问题来了,需要接入MongoDB的数据,于是开始了尝试;
前记:
用mongo-connector可以很好的将这两者整合。但是这样的效果并不是我想要的;
我需要像Solr自有的solr-dataimporthandler一样将数据导入Solr;
进入正题:
Solr使用的7.4版本
大致思路:
使用(mongo驱动包)mongo-java-driver-3.11.2.jar(版本自己定),作为JDBC来使用,不能称作mongo-jdbc,但是在本文使用的方式是这个意思;
使用(基于solr-dataimporthandler)写的SolrMongoImporter.jar,作为读取data-config.xml(数据库配置文件)的工具;solr-dataimporthandler为Solr自带的工具,提供常用的结构化数据的读取导入;
说白了就是,使用mongo驱动包自己写个基于solr导入mongoDB数据的导入器;
SolrMongoImporter.jar编写
使用来自github上的源码经行修改,我主要新定义了部分自己需要的字段的读取,将pom.xml的文件里面的依赖版本改成我已有的
将编写好的SolrMongoImporter.jar放入solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下面
mongo-java-driver-3.11.2.jar
同样也是来自github上有源码的,mongo-java-driver,版本自选;
注意,在SolrMongoImporter.jar 编写的时候,会使用到这个版本号,最好使用对应版本的依赖项。
XML配置
在Solr目录下conf文件夹中的solrconfig.xml中:
1 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 2 <lst name="defaults"> 3 <str name="config">data-config.xml</str> 4 </lst> 5 </requestHandler>
data-config.xml配置:
通过xml配置的文件名,在conf文件夹中修改data-config.xml;
我的配置如下,originField为我自己定义的字段,请不要参考。
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <dataConfig> 4 <dataSource name="MongoSource" type="MongoDataSource" host="172.16.xxx.xxx" port="27017" database="xxx" /> 5 <document> 6 <entity name="iot" 7 processor="MongoEntityProcessor" 8 query="{'typeId':'3ef659db64a24cb8805d7c2ed08fdce9'}" 9 collection="xxx" 10 datasource="MongoSource" 11 transformer="MongoMapperTransformer" 12 mapMongoFields="true"> 13 <field column="id" name="id" mongoField="typeId"/> 14 <field column="name" name="name" mongoField="typeName"/> 15 <field column="origin" name="origin" mongoField="ogName" originField="iot"/> 16 </entity> 17 </document> 18 </dataConfig>
配置完成后,重启Solr,import成功
上图:
后面还需要研究如何自动更新~~~