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分钟执行一次增量索引(可根据实际业务调整时间)