您的位置:首页 > 产品设计 > UI/UE

solr 增量更新

2016-08-04 16:50 183 查看
</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  新建和修改都更新:

TIMESTAMP
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP


更新到solr索引去   

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

更新索引的 

url   :  /{xxxx}/dataimport 

参数:

command:

delta-import

commit:

true

wt:

json

indent:

true

verbose:

false

clean:

false

optimize:

false

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的时候 就会自己去掉这条记录了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息