</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
参数:
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的时候 就会自己去掉这条记录了