因关系表数据已过亿,用户表数据也接近六千万,直接查询数据库,对数据库压力较大,所以用solr生成索引来优化
不过关联表生成索引速度比单表索引生成速度要慢许多,,很多同学遇到建立关联表的索引的时候,子实体更新了信息之后父类对应的索引数据并不会更新,这里需要用到parentDeltaQuery属性,把从子类抓取的更新的数据,同步到父类里面去,代码如下
<entity name="zbuserrelation"
deltaQuery="SELECT id from zbuserrelation where addtime >= '${dataimporter.last_index_time}'"
deltaImportQuery="SELECT id,userId,addtime,ShareImgUrl,TopicId,zbId,ShareUserId from zbuserrelation where id='${dataimporter.delta.id}'"
query="SELECT id,userId,addtime,ShareImgUrl,TopicId,zbId,ShareUserId from zbuserrelation where id<140000000 and id>130000000 ">
<entity name="zbuserinfo"
deltaQuery="SELECT id from zbuserinfo where addtime >='${dataimporter.last_index_time}'"
deltaImportQuery="SELECT nickname,sex,state,headimgurl from zbuserinfo where id = '${dataimporter.delta.id}'"
parentDeltaQuery="SELECT id from zbuserrelation where userId='${zbuserinfo.id}'"
query="SELECT nickname,sex,state,headimgurl from zbuserinfo where id= '${zbuserrelation.userId}'" >
<field column="nickname" name="nickname"/>
<field column="sex" name="sex" />
<field column="state" name="state" />
<field column="headimgurl" name="headimgurl" />
</entity>
</entity>
关联表需要实体嵌套,如果是不相关表的话,是多个实体并列
managed-schema属性为
<!-- 字段 -->
<field name="userId" multiValued="false" indexed="true" stored="true" type="text_general" />
<field name="zbId" multiValued="false" indexed="true" stored="true" type="int" />
<field name="ShareImgUrl" multiValued="false" indexed="true" stored="true" type="string" />
<field name="addtime" multiValued="false" indexed="true" stored="true" type="date" />
<field name="TopicId" multiValued="false" indexed="true" stored="true" type="int" />
<field name="ShareUserId" multiValued="false" indexed="true" stored="true" type="int" />
<field name="nickname" multiValued="false" indexed="true" stored="true" type="string" />
<field name="sex" multiValued="false" indexed="true" stored="true" type="int" />
<field name="state" multiValued="false" indexed="true" stored="true" type="text_general" />
<field name="headimgurl" multiValued="false" indexed="true" stored="true" type="string" />
需要注意的是三个原始字段id,version,text不能删除掉
结果如下