共计 1796 个字符,预计需要花费 5 分钟才能阅读完成。
Solr 定时更新索引
– solr 6.6.0
– dataimport.scheduler
这里先重点说下,定时更新引用的 org.apache.solr.handler.dataimport.scheduler.ApplicationListener 不是 sorl 源码自带的,需要另外去下载,下载地址为:dataimport.scheduler,因为源码年久没人维护,所以并不兼容现有版本,需要做稍微的修改。
一、打开 WEB-INF 下的 web.xml 文件,在 <servlet>
前添加下面的配置,配置定时更新计划
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
二、打开 solr 对应的 core 下 conf 目录的 data-config.xml 文件,配置增量更新索引。
具体官网地址:delta-import。
这里说下其中比较重要的参数:
deletedPkQuery:是指增量更新的时候,要删除的 document,查询只需要返回一个 document 的 id 即可,例如:Select id From Table Where Deleted=1
deltaQuery: 同上,返回了修改或添加的 document。solr 会自己判断是否需要添加或修改 document,依据是 managed-schema 文件里面配置的 uniquekey,如果有相同的,那就替换旧的,不存在则添加。这里的返回结果会排除掉上面 deletedPkQuery 的 id。另外,如果 uniquekey 的 field 定义类型为整形的要注意下,千万不要用 pint(6.6.0 下定义的)这个类型,增量更新的时候会出现莫名其妙的问题,我搞了好久才发现这个 uniquekey 定义的是 pint,改成 int 后就正常了。例子:`Select id From Table Where Updated=1 And UpdateAt>'${dih.last_index_time}'
deltaImportQuery: 这个配置是增量更新的重点所在,它直接返回增量更新的数据(根据 deletedPkQuery 和 deltaQuery 返回的 id),例子:Select * From DocumentTable Where ${dih.delta.id}
,
这里说下 ${dih.last_index_time}
,这个变量是 core 下的 conf 目录的 dataimport.properties,上面记录了索引最近更新的时候,在执行查询的时候,solr 会自动替换成配置文件里面记录的时间,${dih.delta.id} 是 deltaQuery 里面返回的字段,这里是 id,也可以是其他名字,如
deltaQuery="SELECT StudentID FROM Student Where Updated=1 And [UpdateTime] > '${dih.last_index_time}'"
deltaImportQuery="SELECT * FROM Student Where StudentID=${dih.delta.StudentID}"
更多 Solr 相关教程见以下内容:
CentOS7 下搭建 Solr 6.6 全文检索服务器及 IK 分词器配置 http://www.linuxidc.com/Linux/2017-12/149897.htm
Apache Solr: 安装和运行 http://www.linuxidc.com/Linux/2016-12/138527.htm
Solr 实现 Low Level 查询解析(QParser)http://www.linuxidc.com/Linux/2012-05/59755.htm
Solr6.0.0 + Tomcat8 配置问题 http://www.linuxidc.com/Linux/2016-05/131845.htm
CentOS 6.7 下单机部署 Solr 7.1.0 http://www.linuxidc.com/Linux/2017-12/149889.htm
Solr 的详细介绍:请点这里
Solr 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149901.htm