Solr DIH query 工作流
本文地址 http://www.cnblogs.com/jasonxuli/p/6491270.html
DataImportHandler (DIH) 支持全量数据导入和增量数据导入,主要有四个query:query,deltaQuery,parentDeltaQuery,deltaImportQuery。
大体概括就是:
想要以 Student 表为 document 的主体,Class表通过 Student.classId 于 Student 表关联,配置如下:
solr-data-config.xml:
1 <dataConfig> 2 <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" 3 url="jdbc:mysql://dbhost/dbname?zeroDateTimeBehavior=convertToNull" user="dbuser" 4 password="dbpassword"/> 5 <document> 6 <entity name="student" transformer="RegexTransformer" pk="id" 7 query="select * from Student where deleted=0;" 8 deltaImportQuery="select * from Student where deleted=0 and id='${dih.delta.id}';" 9 deltaQuery="select id from Student where convert_tz(updatedAt, '+00:00', '+08:00') > '${dih.last_index_time}');" 10 deletedPkQuery="select id from Student where deleted=1;"> 11 12 <field column="id" name="id"/> 13 <field column="name" name="name"/> 14 <field column="age" name="age"/> 15 <field column="classId" name="classId"/> 16 <field column="deleted" name="deleted"/> 17 <field column="createdAt" name="createdAt"/> 18 <field column="updatedAt" name="updatedAt"/> 19 20 <entity name="class" transformer="RegexTransformer" pk="classId" 21 query="select * from Class where deleted=0 and id='${student.classId}'" 22 deltaQuery="select id from Class where convert_tz(updatedAt, '+00:00', '+08:00') > '${dih.last_index_time}'" 23 parentDeltaQuery="select id from Student where classId=${class.id}"> 24 <field column="image" name="image"/> 25 <field column="banner" name="banner"/> 26 </entity> 27 </entity> 28 </document> 29 </dataConfig>
在上面配置中,student有四个SQL语句,class有三个SQL语句,其中只有 student.query 没有输入(参数)。
全量导入时:
1,从父实体 student 开始,执行 query 语句,获取到 student.id 等字段;
2,用这些 student.id 去组成 class.query 语句,获取 class。
增量导入时:
只要有任何父/子数据变化,就重新生成相关文档
1,从子实体 class 开始,执行 deltaQuery 语句,获取到 class.id;
2,用 class.id 组装 class parentDeltaQuery 语句,获取到 student.id;
3.1,用 student.id 组装 student deltaImportQuery 语句,获取到需要更新的 student;
3.2,用 class.id 组装 class deltaImportQuery 或者 class query,获取需要更新的 class ;
参考:https://wiki.apache.org/solr/DataImportHandler#Configuring_DataSources
----------------
备注:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">solr-data-config.xml</str> </lst> <lst name="datasource"> <str name="driver">com.mysql.jdbc.Driver</str> <str name="url">jdbc:mysql://localhost/test</str> <str name="user">root</str> <str name="password">root</str> </lst> </requestHandler>