solr dataImportHandler mysql增量索引

本文详细解析了全量索引与增量索引在数据导入过程中的配置区别,以及如何通过dataimport.properties文件实现数据的增量更新。通过分析配置文件和数据导入处理流程,揭示了增量效率的提升机制。
 
前一篇中全量索引的data-config.xml 的配置为
<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://199.xxx.xxx.xxx/quentinxxz_com"
              user="qqq"
              password="qqq"/>
  <document>
    <entity name="product"
            query="select id, price,modify_time from tts_product">
       <field column="price" name="tts_price"/>
       <field column="modify_time" name="tts_modify_time"/>
    </entity>
  </document>
</dataConfig>
 
对应的增量索引的data-config.xml 的配置为
<dataConfig>
    <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://199.xxx.xxx.xxx/quentinxxz_com"
              user="qqq"
              password="qqq"/>
  <document>
    <entity name="product"
            query="select id, price,modify_time from tts_product"
               deltaImportQuery="select id, price,modify_time from tts_product where ID='${dih.delta.id}'"
               deltaQuery="select id from tts_product where modify_time >'${dih.last_index_time}'">
             <!---->
              
       <field column="price" name="tts_price"/>
       <field column="modify_time" name="tts_modify_time"/>
    </entity>
  </document>
</dataConfig> 
 
在conf/dataimport.properties中会自动存储最近一次索引的时间,solr正是以此为依据实现增量。但是前提确保你的数据库表中有类似modify_time这样的字段,好与可以做对比。
 
${dih.last_index_time}为dataimport.properties中的last_index_time信息
${dih.delta.id}为deltaQuery所查询出来的主键id 
 
conf/dataimport.properties中自动存储的信息
 
 
#Wed Jul 30 10:58:44 GMT+08:00 2014
last_index_time=2014-07-30 10\:58\:37
product.last_index_time=2014-07-30 10\:58\:37
 

query是获取全部数据的SQL
deltaImportQuery是获取增量数据时使用的SQL
deltaQuery是获取pk的SQL
parentDeltaQuery是获取父Entity的pk的SQL

 
注:从配置文件来看,增量的效率似乎很低,"select id, price,modify_time from tts_product where ID='${dih.delta.id}"给我们的感觉是每有一条纪录,就根据id去查一定数据库。其实不然,仔细查看dataImportHanlder的源码,会发现实际执行的sql语句已经做过处理了,DIH会将多个id进行组合,修改sql语句,再执行一次查询。

 

Solr 8.11.2 支持自动增量索引,也称为实时获取。它是一种用于快速索引新增、更新和删除文档的方法,可以在文档添加、更新或删除后立即反映到索引中。 要配置自动增量索引,请按照以下步骤操作: 1. 在 solrconfig.xml 文件中添加以下配置: ``` <updateLog> <str name="dir">${solr.ulog.dir:}</str> <int name="numVersionBuckets">65536</int> <int name="autoCommitMaxTime">15000</int> <int name="openSearcher">false</int> <int name="maxBufferedOps">1000</int> <int name="maxDocsInRam">5000</int> <bool name="useColdSearcher">false</bool> <str name="maxMutationsInFlight">512</str> <bool name="softCommit">false</bool> <bool name="waitSearcher">false</bool> <bool name="realtime">true</bool> </updateLog> ``` 2. 在 schema.xml 文件中定义唯一键(id)。例如: ``` <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> ``` 3. 在 solrconfig.xml 文件中配置 dataimport 搜索处理程序(handler)以自动获取数据。例如: ``` <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> ``` 4. 在 data-config.xml 文件中定义数据源和索引。例如: ``` <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" user="root" password="password" /> <document> <entity name="mytable" pk="id" transformer="RegexTransformer" query="SELECT * FROM mytable"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="description" name="description" /> </entity> </document> </dataConfig> ``` 5. 运行 Solr 服务器并访问 /dataimport 页面,以开始自动增量索引。 注意:自动增量索引需要 SolrCloud 或者一个单独的 Solr 节点,并且需要使用 Solr 的事务日志(transaction log)来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值