solr导入数据库数据

来源:互联网 发布:印尼酒店网络怎么样 编辑:程序博客网 时间:2024/05/17 03:10

 这次学习solr主要是为了使用它新推的一个模块----dataImportHandler

    所以,我们也就从这里开始。

     1      在solrConfig.xml中声明dataImportHandler

              <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

                     <lst name="defaults">

                          <str name="config">data-config.xml</str>     

                     </lst>

               </requestHandler>

     2      配置data-config.xml文件

              <dataConfig>

                   <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/super"

                      user="root"    password="admin" />

                         <document name="peoples">

                                <entity name="people" query="select * from people">

                                          <field column="id" name="id" />

                                         <field column="name" name="name" />

                               </entity>

                      </document>

              </dataConfig>

3     启动tomcat

        哈,笔者异想天开了,结果它抛出了这样的异常:

       严重: Exception while loading DataImporter

                org.apache.solr.handler.dataimport.DataImportHandlerException: Failed to initialize DataSource: null

               Processing Document #

        事情是这样的,数据源使用的是mysql,一开始,我们并没有导入mysql的驱动包,所以,程序没有办法实例化数据源。包有两种方法:

               1         就是在系统的classpath中配置

               2          就是在solr.war中配置

          笔者不想太多麻烦,所以就直接将包放在tomcat的lib目录下了。

4   现在终于部署好了solr的dataimportHandler了

       我们去到http://localhost:8080/solr/dataimport,   估计这个路径就是启动索引的

      再去admin页面输入 *:*查询,果然,数据库中的数据都已经被导入了。

5     现在换一个dataconfig文件:

      <document name="peoples">

       

    <entity name="x" query="select * from people"  where="id between 20 and  100" rootEntity="false">

      <entity name="y" query="select * from people"

       processor="CachedSqlEntityProcessor" where="id=x.id">

       <field column="id" name="id" />

                   <field column="name" name="name" />

      </entity>

    </entity>

    </document>

     这里用的缓存的sql实体处理器,测试这个主要是为了解决我们公司的海量数据的问题。

     麻烦又来了,当数据达到几百w的时候,它居然抛了outofMemery异常。

   好了,这次到这里吧,下次回来要好好的研究下缓存的sql实体处理器的代码,弄懂它的缓存处理,以便做出一些更改。

转自:http://mxsfengg.blog.163.com/blog/static/26370218200810216201159/