日期:2014-05-16  浏览次数:20471 次

学习使用solr(一),solr和tomcat的配置及数据库中表的全量索引(下)

?

??????? 在tomcat中部署好了solr之后,接下来就要对数据库中的表建立索引了。

??????? 首先回顾一下文件的结构:

??????? tomcat的$CATALINA_HOME是/usr/local/tomcat-solr-blog,solr的$SOLR_HOME是/usr/local/tomcat-solr-blog/solr。具体的情况可以去大体看一下上一篇文章:学习使用solr(一),solr和tomcat的配置及数据库中表的全量索引(上)。

?

??????? 第二步,为数据库中的表建立全量索引。

??????? 我此次建立的索引是针对一张表的,多张表的还没研究。

??????? 首先说一下我所索引的数据表的结构和数据吧,为了简单起见,一张图就表示了它。由下图可见,我的数据表格里就有两列,一列int型的solr_id,一列varchar型的solr_text。数据是李白的《静夜思》。由于我只完成了全索引的建立,所以此处对数据没什么要求。
????????

??????? 有了数据之后就开始对此表建立全索引了。

??????? 1,先要修改solrconfig.xml文件,它存在于$SOLR_HOME/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>

??????? 增加好了之后,先重启一下tomcat看看有什么问题。启动tomcat,查看日志发现报了一个错误:

??????? Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'

??????? 在加载DataImportHandler时出错了,这是因为没有往项目里面导入apache-solr-dataimporthandler-3.6.2.jar这个jar包。好了,这里我碰到了一个没有解决的问题。现在看solrconfig.xml这个文件当中的某段配置,如下:

  <lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar" />
  <lib dir="../../contrib/extraction/lib" regex=".*\.jar" />

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

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

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

????????

??????? 观察这段代码不难发现,它正密集的指出了一些jar包所在的位置,其中有这样一项,

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

?

??????? 似乎为我指明了我的apache-solr-dataimporthandler-3.6.2.jar包应该放在哪里。于是我按照路径,在配置文件往上两级建立了dist文件夹,并将jar包放进去。再重启tomcat。发现没用……这里,促使我开始研究tomcat的原理了。

??????? 其实这个问题很好解决,直接找到/usr/local/tomcat-solr-blog/webapps/solr-example/WEB-INF/lib,将jar包拖进去,再重启tomcat看看。报了一个新错误:Can't find resource 'data-config.xml'。接下来就来建立data-config.xml文件。

?

??????? 2,在solrconfig.xml的同级目录下,新建data-config.xml,并且填入内容如下:??????

<dataConfig>  
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://host/db_name"
              user="root"
              password="****"/>
  <document>  
    <entity name="solr_test"   
            query="select solr_id,solr_text from solr_test">  
    </entity>  
  </document>  
</dataConfig>

??????

??????? 这个xml文件的各项都很好理解,显示配置了数据库的驱动,地址,用户名和密码。然后又对对哪个表建立索引进行了配置,先按照这个配置去写,这是最简单的全量配置的写法。

??????? 新建完了之后要把数据库的驱动的jar包加到工程里面,我将mysql驱动的jar包也放到了/usr/local/tomcat-solr-blog/webapps/solr-example/WEB-INF/lib之下。然后再重启tomcat看看情况。启动成功,没有报错。但此时还没建立全量索引。只能说明连接数据库的部分没有出错。好吧,最后一步,配置schema.xml文件。

?

??????? 3,改写schema.xml文件。首先找到schema.xml,它也跟solrconfig.xml是属于同级目录。打开来看一下,发现这个文件好长,有好多的配置项和注释啊。所以,我就简化了一下,把我不需要的全部删掉,最后删减玩的schema.xml是下面这个样子。

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
 
  <types>
    <f