Solr在MySQL中建立索引

本文详细介绍了如何将MySQL数据库中的数据直接导入到Solr中,通过配置DIH(DataImportHandler)来实现数据的索引化过程。包括了驱动包的引入、配置文件的修改、DIH的注册、配置数据库连接、定义数据源和字段等关键步骤,最终通过执行导入命令完成数据的索引任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Solr可以直接从数据库中提取数据进行索引,具体功能由 Data Import Handler (DIH)提供,文档页面位于:https://cwiki.apache.org/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handler

  1. 将MySQL的驱动包拷贝到dist目录下,我使用的是mysql-connector-java-5.1.26-bin.jar;


  2. 修改solrconfig.xml文件,该配置文件位于core目录下,core目录在server/solr目录下;
    a. 增加所需jar包引用配置:

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

b. 增加requestHandler的配置
首先需要注册DIH,加入如下内容:

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

唯一需要的参数是“config”参数,内容为配置文件的路径,在这里定义为/conf/db/db-data-config.xml,由于solrconfig.xml文件本身位于conf目录下,因此只需要写“db/db-data-config.xml”即可;
可以配置多个DIH,但需要在不同的下分别配置。

  1. 配置DIH Configuration File
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<!--首先是对数据库本身的定义
-->
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/facebook" user="root" password="123456"/>
    <document name="post">
         <entity name="supUser" query="select uid, since from sup_user_table"            
            deltaQuery="select uid, since from sup_user_table where last_modified > '${dataimporter.last_index_time}'">      
            <field column="uid" name="id" />
            <field column="since " name="since " />
         </entity>
    </document>
</dataConfig>

这里就常用的用法简单说明:
- query语句:是用于批量导入(Full Import)中获取符合条件的全部数据的SQL;
- deltaQuery语句:是用于增量导入(Delta Import)中获取符合增量导入标准的数据的主键的SQL,供deltaImportQuery查询使用。
- deltaImportQuery语句:增量导入(Delta Import)中获取需要增量索引数据(document)的字段(field)

  1. 为数据库表字段建立域(field),编辑\conf\managed-schema文件:
    在db-data-config.xml的field中出现的column必须要在managed-schema中有定义,否则不会添加到索引中。
    已经将uid定义为id,该字段在managed-schema中已经有定义,所以再加上对since的定义即可。

    <field name="since" type="string" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>
  2. 重启Solr,执行导入命令;
    DataImportHandler的常见命令:

    批量导入(full-import):

    http://<host>:<port>/solr/dataimport?command=full-import&commit=y
    

    增量导入(delta-import):

    http://<host>:<port>/solr/dataimport?command=delta-import&commit=y
    

    导入状态查询(status):

    http://<host>:<port>/solr/dataimport
    

    重新装载配置文件(reload-config):

    http://<host>:<port>/solr/dataimport?command=reload-config
    

    终止导入(abort):

    http://<host>:<port>/solr/dataimport?command=abort
    

Solr执行增量导入的大致原理:

1、Solr 读取conf/dataimport.properties 文件,得到solr最后一次执行索引操作的时间戳last_index_time,以及单个实体最后一次执行索引的时间戳:entity_name.last_index_time

2、Solr对指定的实体使用deltaImportQuery SQL查询得到insert或update时间戳大于${dataimporter.last_index_time}需要增量索引的字段,然后调用deltaQuery对符合条件需要执行增量索引的文档的字段进行索引,并更新dataimport.properties 的时间戳
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值