solr 增量更新

</pre>solr 数据太多了 不能老full-import  ,数据少 还好  数据超过10万+  创建索引要好久 好久,,,<p></p><p></p><p> 把数据库新增的数据创建索引 这时候就引入了增量更新 delta-import </p><p></p><p>首先在data-config.xml :</p><p></p><pre name="code" class="plain"><document>
        <entity name="iczshuxue"  pk="t_uuid"
query="SELECT knowledge_id, content, t_uuid, degree degree_enum,
         type type_enum, label, options,'iczshuxue' table_name,
         q_type child_type,children_id,s_content,s_options,updateTime
        FROM iczshuxue where state != -1  "
deltaImportQuery="SELECT knowledge_id, content, t_uuid, degree degree_enum,
         type type_enum, label, options,'iczshuxue' table_name,
         q_type child_type,children_id,s_content,s_options,updateTime
        FROM iczshuxue where t_uuid='${dih.delta.t_uuid}'"
deltaQuery="SELECT t_uuid FROM iczshuxue where state != -1 and updateTime>'${dataimporter.last_index_time}'">  
        <field column="content" name="edu_title"  />
        <field column="options" name="edu_content"  />
        <field column="label" name="edu_label" />
        <field column="degree_enum" name="edu_difficulty" />
        <field column="type_enum" name="edu_type" />
        <field column="t_uuid" name="edu_ques_id" />
        <field column="knowledge_id" name="edu_knowledge_id" />
        <field column="table_name" name="edu_table" />
        <field column="children_id" name="edu_child_id" />
        <field column="child_type" name="edu_child_type" />
        <field column="s_content" name="s_edu_title" />
        <field column="s_options" name="s_edu_content" />
	<field column="updateTime" name="updateTime"/> 
        </entity> 

 </document>
pk :主键

deltaimportQuery和deltaQuery 增量更新用的

deltaQuery查出最后更新时间大于dataimport.properties的last_index_time的pk集合   

deltaimportQuery然后取出pk 主键的记录详情

数据库字段如果没有updateTime 就要新建呀,类型是timestamp  新建和修改都更新:

TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP


更新到solr索引去   

 就是这么简单的东西  我都不好意思说我折腾了辣么久  诶


更新索引的 

url   :  /{xxxx}/dataimport 

参数:

  1. command:
    delta-import
  2. commit:
    true
  3. wt:
    json
  4. indent:
    true
  5. verbose:
    false
  6. clean:
    false
  7. optimize:
    false
  8. debug:
    false
clean 参数如果是true 的话 索引会被清空`~我艹 但是 和群里 有得人交流 他说他的不会被清空 没深聊 ,,多次自己实验 就是会清空啊 不然 为嘛叫clean


然后聊聊 修改数据   


在上面的情况中 添加记录和修改记录 都会往solr添加新的记录,,  改一次 加一条  改一次 加一条~~额吓死本宝宝了 ,
打开文件 
schema.xml :
找到<uniqueKey>id</uniqueKey>  把id 改了  改成某一个field 的name  就好了,前提是这个field的属性indexed=true    一般都是id 什么的啦  
 我刚开始纠结的原因是 我用的id是下面这个: 
<fieldType name="uuid" class="solr.UUIDField" sortMissingLast="true" indexed="true"/>
<field name="id" type="uuid" indexed="true" stored="true" required="true" multiValued="false" />

再聊聊删除数据
这儿删除 不是真正意义的删除  真正数据库删除了数据 就会涉及到solr 索引重建    
这里说的删除是  假删  修改有效字段状态而已 比如 state 正常情况下是0 不显示情况是-1  见 
data-config.xml
在原有的基础上加 :
deletedPkQuery="select t_uuid from iczshuxue where state = -1"  
这样  以后delta-import的时候 就会自己去掉这条记录了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值