solr增量更新索引及定时触发索引任务

1、原理:
a.solr每次更新索引会记录最后索引时间。(文件:dataimport.properties )
b.根据最后索引时间匹配出数据库在此时间之后产生的数据的id。
c.根据id构建该条数据索引。
2、data-config.xml参数说明
query:为全量索引执行的sql
deltaQuery:增量索引时匹配出需要索引的id
deltaImportQuery:增量索引时根据id查询的sql语句(和deltaQuery配合使用)  

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/blog" user="root" password="chaojie"/>
   <document name="blog">
        <entity name="article" pk="id"
  query="select a.id,a.title,ac.content,u.email from article a left join `user` u on (u.id=a.user_id)
         left join article_content ac on (ac.article_id=a.id)"
  deltaQuery="select id from article a where a.update_at > unix_timestamp('${dih.last_index_time}')*1000"
  deltaImportQuery="select a.id,a.title,ac.content,u.email from article a left join `user` u
  on (u.id=a.user_id) left join article_content ac on (ac.article_id=a.id)
  where a.id = '${dih.delta.id}'">
                        <field column="id" name="id"/>
                        <field column="title" name="boTitle"/>
                        <field column="content" name="boContent"/>
                        <field column="email" name="boEmail"/>
                </entity>
  </document>
</dataConfig>

注:

${dih.last_index_time}为solr系统变量(最后索引时间)
${dih.delta.id}未增量索引id参数

3、定时更新增量索引(crontab实现)
所以使用crontab实现,只因配置简单

crontab -e
*/5 * * * * curl http://localhost:9001/solr/dataimport?command=delta-import

注:5分钟执行一次增量索引(可根据实际业务调整时间)

猜你喜欢

转载自blog.csdn.net/hechaojie_com/article/details/82731562