solr本身就提供了一个工具库实现定时增量索引,但是我在使用的过程中发现会出现一些问题,目前遇到两点:
1.启动时总是报如下异常:
?
1
The web application [solr] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
尝试修改源码,不通过SolrResourceLoader加载配置文件,修改完成部署后,可以正常启动。
2.正常启动后,定时发起任务时,报如下异常:
?
1
415 Unsupported Media Type
查看BaseTimerTask类,发现在发送http请求的地方,没有在请求头中加入Content-Type。修改之后问题解决。
代码具体修改如下,完整源码会在最后提供下载地址:
ApplicationListener类:
?
1
2
3
4
5
6
7
8
9
10
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
...
Timer timer = new Timer();
HttpPostScheduler task = new HttpPostScheduler(
servletContext.getServletContextName(),
servletContext.getInitParameter("autoDeltaImportConfPath"),
timer);
...
}
SolrDataImportProperties类:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
private String autoDeltaImportConfPath;
public SolrDataImportProperties() {
}
public SolrDataImportProperties(String autoDeltaImportConfPath) {
this.autoDeltaImportConfPath = autoDeltaImportConfPath;
}
...
public void loadProperties(boolean force) {
try {
if (force || properties == null) {
properties = new Properties();
File dataImportProperties = new File(autoDeltaImportConfPath,
"dataimport.properties");
...
}
HttpPostScheduler类:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public HttpPostScheduler(String webAppName, String autoDeltaImportConfPath, Timer t) throws Exception{
...
//load properties from global dataimport.properties
p = new SolrDataImportProperties(autoDeltaImportConfPath);
...
}
...
private void sendHttpPost(String completeUrl, String coreName){
...
URL url = new URL(completeUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("type", "submit");
conn.setRequestProperty("Content-Type", "*/*"); //新增
conn.setDoOutput(true);
...
}
web.xml文件:
?
1
2
3
4
5
6
7
autoDeltaImportConfPath
/yourconfpath
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
另外说明一点,现在的dataimport.properties可以随意放,只需在上面指定位置即可。
源码托管在Git osc了,地址是http://git.oschina.net/ywooer/solr-dataimporthandler-scheduler.git
参考文档:
官方文档,http://wiki.apache.org/solr/DataImportHandler#Scheduling
官方工具库:http://code.google.com/p/solr-data-import-scheduler/
另外有一个第三方实现支持重建索引:https://code.google.com/p/solr-dataimport-scheduler/
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com