使用DataImportHandler连接MongoDB和Solr的步骤

时间:2014-01-30 07:46:18

标签: mongodb solr dataimporthandler dih

我是SOLR和MONGODB的新手。

我正在尝试使用DataImportHandler将mongodb中的数据索引到SOLR中,但我找不到我需要遵循的确切步骤。

你能否帮我解决使用DataImportHandler将MongoDB索引到Solr的确切步骤?

SolrVersion - solr-4.6.0

MongoDB版本 - 2.2.7

2 个答案:

答案 0 :(得分:23)

迟到回答,但是人们可能认为它很有用。

以下是使用DataImportHandler将数据从mongodb导入Solr 4.7.0的步骤。

第1步:

假设您的Mongodb具有以下数据库和集合

Database Name: Test
Collection Name: sample

sample集合包含以下文档

db.sample.find()
{ "_id" : ObjectId("54c0c6666ee638a21198793b"), "Name" : "Rahul", "EmpNumber" : 452123 }
{ "_id" : ObjectId("54c0c7486ee638a21198793c"), "Name" : "Manohar", "EmpNumber" : 784521 }

第2步:

在solrhome文件夹中创建一个lib文件夹(包含bincollection1个文件夹)

将以下jar文件添加到lib文件夹。您可以从 here下载solr-mongo-importer!

- solr-dataimporthandler-4.7.0.jar
- solr-mongo-importer-1.0.0.jar 
- mongo-java-driver-2.10.1.jar (this is the mongo java driver)

第3步:

在schema.xml中声明Solr字段(假设id已经默认定义)

<fields> </fields>标记内的schema.xml中添加以下字段。

 <field name="Name" type="text_general" indexed="true" stored="true"/>
 <field name="EmployeeNumber" type="int" indexed="true" stored="true"/>

第4步:

通过在<config> </config>标记内添加以下代码,在solrconfig.xml中声明data-config文件。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>

第5步:

在路径collection1 \ conf \中创建一个data-config.xml文件(默认情况下它包含solrconfig.xml和schema.xml)

数据-config.xml中

<?xml version="1.0"?>
<dataConfig>
<dataSource name="MyMongo" type="MongoDataSource" database="Test" />
<document name="import">
 <!-- if query="" then it imports everything -->
     <entity  processor="MongoEntityProcessor"
             query="{Name:'Rahul'}"
             collection="sample"   
             datasource="MyMongo"
             transformer="MongoMapperTransformer" name="sample_entity">

               <!--  If mongoField name and the field declared in schema.xml are same than no need to declare below.
                     If not same than you have to refer the mongoField to field in schema.xml
                    ( Ex: mongoField="EmpNumber" to name="EmployeeNumber"). -->                                              

           <field column="_id"  name="id"/>               
           <field column="EmpNumber" name="EmployeeNumber" mongoField="EmpNumber"/>                            
       </entity>
 </document>
</dataConfig>

第6步:

假设solr(我使用了端口8080)并且mongodb正在运行,请在浏览器中打开以下链接http://localhost:8080/solr/dataimport?command=full-import,以便将数据从mongodb导入到solr。

导入的字段为_id,Name和EmpNumber(MongoDB)为id,Name和EmployeeNumber(Solr)。

您可以在http://localhost:8080/solr/query?q=*

中查看结果

答案 1 :(得分:3)

您可以尝试使用SolrMongoImporter,它会要求您将2个库导入到solr proyect中并创建data-config.xml。

如果你没有,你可能需要在solrconfig.xml中导入以下库

  <lib dir="../../../contrib/dataimporthandler/lib" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-.*\.jar" />