浅谈solr-mongo-dataimport
来源:互联网 发布:股票高手软件 编辑:程序博客网 时间:2024/04/29 23:04
最近项目需要一个全局搜索功能。我们的项目绝大部分数据都是存在mongodb中。搜索引擎准备用solr。
之前因为项目需要,mongodb与solr已经做过一次简单的整合。之所以说简单,是因为只是单表建立索引。用mongo-connector可以很好的将这两者整合。现在这个全局搜索的功能,需要的是多表联合。mongo-connector并不支持此功能。
忽然想到mysql与solr整合,建立索引用的是配置文件的方法。可以进行多表联合查询,mongo和solr能用类似的方法吗?于是就进行各种搜索。百度很久,网上一大片都是mongo-connector的教程。GitHub上有SolrMongoImporter的教程,国内也很少见。所以决定写此篇博客与大家分享经验。如有不足之处请多多指教,后面会贴出GitHub地址。
和mysql-solr整合一样,需要进行一些配置。
本人用的是solr5.5.0,mongo2.4.3。所以以下配置都是基于这两个版本。
配置
jar包管理
- solr自带jar包
将solr-5.5.0/dist下的solr-dataimporthandler-5.5.0.jar复制到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib下面 - mongo驱动包(后面提供下载地址)
将驱动包放入solr-5.5.0/server/lib下面 - solr-mongo-import.jar(后面提供下载地址)
将此jar包放到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib下面
xml配置文件
- 修改solrconfig.xml
在对应core目录中conf文件夹下的solrconfig.xml中加入以下代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst></requestHandler>
- data-config.xml配置
在conf文件夹下建立data-config.xml文件,配置如下:
<?xml version="1.0"?><dataConfig><!--username:用户名(没有可以不写),password:密码--> <dataSource name="kxlist_list" type="MongoDataSource" database="kxlist_list" host="192.168.1.253" port="27017"/> <document name="data"> <!-- if query="" then it imports everything --> <entity name="share" processor="MongoEntityProcessor" query="{'status':'1'}" collection="shareResources" datasource="kxlist_list" transformer="MongoMapperTransformer"> <field column="id" name="id" mongoField="_id" /> <field column="resourceType" name="resourceType" mongoField="resourceType"/> <field column="resourceId" name="resourceId" mongoField="resourceId"/> <field column="resourceName" name="resourceName" mongoField="resourceName" /> <field column="shareUserId" name="userId" mongoField="shareId"/> <field column="receiveInfo" name="receiveInfo" mongoField="receiveInfo"/> <field column="shareType" name="shareType" mongoFiled="shareType"/> <!--类似关系型数据库的联合查询--> <entity name="commodityList" processor="MongoEntityProcessor" query="{'_id':'${share.resourceId}'}" collection="commoditylist" datasource="kxlist_list" transformer="MongoMapperTransformer"> <field column="commodities" name="commodities" mongoField="commodities"/> <field column="listNum" name="listNum" mongoField="num"/> </entity> <entity name="quotelist" processor="MongoEntityProcessor" query="{'_id':'${share.resourceId}'}" collection="quotelist" datasource="kxlist_list" transformer="MongoMapperTransformer"> <field column="commodities" name="commodities" mongoField="commodities"/> <field column="listNum" name="listNum" mongoField="num"/> </entity> <entity name="demandlist" processor="MongoEntityProcessor" query="{'_id':'${share.resourceId}'}" collection="demandlist" datasource="kxlist_list" transformer="MongoMapperTransformer"> <field column="commodities" name="commodities" mongoField="commodities"/> <field column="listNum" name="listNum" mongoField="num"/> </entity> </entity> </document> </dataConfig>
参数说明(只介绍个别参数):
dataSource:数据源配置,支持副本集。用“”,“”分割。例如: host=”192.168.1.253,192.168.1.254” port=”27017,27017”
field: ‘column’相当于别名。’name’需要与managed-schema中field名字对应。’mongoField’mongodb数据库字段名字。
- managed-schema配置
在此只展示field字段配置,里面也有一些动态字段的配置。
<field name="_version_" type="long" indexed="true" stored="true"/> <field name="_root_" type="string" indexed="true" stored="false"/> <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/> <copyField source="*" dest="_text_"/> <field name="id" type="string" indexed="true" stored="true" /> <field name="_ts" type="long" indexed="true" stored="true" /> <field name="resourceType" type="string" indexed="false" stored="true"/> <field name="resourceId" type="string" indexed="false" stored="true"/> <field name="resourceName" type="string" indexed="true" stored="true"/> <field name="userId" type="string" indexed="true" stored="true"/> <field name="listNum" type="string" indexed="true" stored="true"/> <field name="shareType" type="string" indexed="false" stored="true"/> <!-- Dynamic field definitions allow using convention over configuration for fields via the specification of patterns to match field names. EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i) RESTRICTION: the glob-like pattern in the name attribute must have a "*" only at the start or the end. --><!--在数据库中是以数组形式存在,需要配置动态字段--> <dynamicField name="commodities*" type="string" indexed="true" stored="true"/> <dynamicField name="receiveInfo*" type="string" indexed="true" stored="true"/>
至此,配置已经完毕。可以进行导入数据测试。
导入数据完成之后可以查询测试。
大功告成!!
下面提供各种资源地址
- mongodb驱动包
- solr-mongo-importer jar包
solrMongoImporter源码
GitHub地址
鼻祖地址(github上各种SolrMongoImporter代码都是fork它的)
- 本文主要来源地址(源码和jar包都来源于此地址)
最近发现一些网站转载文章不附带原文链接,所以在此亲自贴上。http://blog.csdn.net/u013259845/article/details/53637060
- 浅谈solr-mongo-dataimport
- solr dataimport
- solr dataimport 的配置
- solr dataimport 命令
- SOLR配置dataimport
- solr配置dataimport步骤
- solr dataimport 的配置
- solr 连接mysql数据库dataimport
- Solr错误:sorry, no dataimport-handler defined!
- solr定时任务dataimport报错解决
- Solr学习总结(五)dataimport
- java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler
- solr dataimport clob字段同步遇到的问题
- (三)solr的dataimport的配置以及中文分词
- 20161216-solr cloud 集群数据导入(dataimport)笔记
- solr配置dataimport步骤 增量 全量同步配置
- Solr集群搭建,zookeeper集群搭建,Solr分片管理,Solr集群下的DataImport,分词配置。
- Solr集群搭建,zookeeper集群搭建,Solr分片管理,Solr集群下的DataImport,分词配置。
- Mark Down学习(一)
- 生成随机数问题
- Android中Application的onCreate多次调用问题
- Java 进阶——类成员初始化顺序
- 基于QQ空间热修复原理实践
- 浅谈solr-mongo-dataimport
- Android PopupWindow
- [Qt笔记1]Qt图形界面
- C语言中fgetc、fputc和getc、putc的区别是什么
- mPopupWindow.setBackgroundDrawable(new BitmapDrawable())被废弃了,那如何设置呢?
- CSS基础(一)
- 借助SourceTree使用Github(四) 修改过的本地项目提交到Github
- Oracle、Mysql和SQL Server数据库连接的URL写法
- 成员变量和静态变量的区别