solr之定时增量索引实现
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 | 415Unsupported Media Type | 
查看BaseTimerTask类,发现在发送http请求的地方,没有在请求头中加入Content-Type。修改之后问题解决。
代码具体修改如下,完整源码会在最后提供下载地址:
ApplicationListener类:
| 1 2 3 4 5 6 7 8 9 10 | @OverridepublicvoidcontextInitialized(ServletContextEvent servletContextEvent) {    ...    Timer timer = newTimer();    HttpPostScheduler task = newHttpPostScheduler(    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 | ...privateString autoDeltaImportConfPath;publicSolrDataImportProperties() {}publicSolrDataImportProperties(String autoDeltaImportConfPath) {    this.autoDeltaImportConfPath = autoDeltaImportConfPath;}...publicvoidloadProperties(booleanforce) {    try{        if(force || properties == null) {            properties = newProperties();            File dataImportProperties = newFile(autoDeltaImportConfPath,                                "dataimport.properties");    ...} | 
HttpPostScheduler类:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | publicHttpPostScheduler(String webAppName, String autoDeltaImportConfPath, Timer t) throwsException{...    //load properties from global dataimport.properties    p = newSolrDataImportProperties(autoDeltaImportConfPath);...             }...privatevoidsendHttpPost(String completeUrl, String coreName){...        URL url = newURL(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 | <context-param>    <param-name>autoDeltaImportConfPath</param-name>    <param-value>/yourconfpath</param-value></context-param><listener>    <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class></listener> | 
另外说明一点,现在的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/
solr之定时增量索引实现的更多相关文章
- solr与.net系列课程(六)solr定时增量索引与安全
		solr与.net系列课程(六)solr定时增量索引与安全 solr增量索引的方式,就是一个Http请求,但是这样的请求显然不能满足要求,我们需要的是一个自动的增量索引,solr官方提供了一个定时器 ... 
- solr定时增量索引
		当数据库的数据发生改变的时候,我们不想手动的去重新添加数据库的数据导solr索引库中,所以用到定时添加索引.增删改的数据.现在写的这些都是基于我之前做的一步步到这来的. 将solr/dist下的sol ... 
- solr-DIH:定时增量索引
		参考:官方文档,http://wiki.apache.org/solr/DataImportHandler#Scheduling googlecode 找到:https://code.google.c ... 
- 四、Solr数据源配置(JNDI、DIH)及定时重做索引
		简介 Solr支持很多种创建索引的方式,包括网页,xml以及数据库,因为我这边做的是企业级的搜索,所以用的是数据库建立索引.其实从数据库建立索引,很大程度上取决于原来的数据库设计. 从数据库建立索引, ... 
- 用solr DIH 实现mysql 数据定时,增量同步到solr
		基础环境: (二)设置增量导入为定时执行的任务: 很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题. 但 ... 
- [Solr] (源) Solr与MongoDB集成,实时增量索引
		一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ... 
- Solr与MongoDB集成,实时增量索引
		Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ... 
- solr与.net系列课程(八)solr中重跑索引的注意事项
		solr与.net系列课程(八)solr中重跑索引的注意事项 我们如果在项目中使用solr,那肯定就是把数据库中的数据跑进solr服务器中,solr有两种操作一种是新建索引,一种是增量索引,这里我们来 ... 
- .Net程序员 Solr-5.3之旅 (三)Solr 从MSSQ导入索引数据
		阅读目录 引言 准备工作 data-config.xml schema.xml 导入数据 结尾 附件下载 引言 Other men live to eat, while I eat to live.- ... 
随机推荐
- Java编码与乱码问题
			一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ... 
- 利用HTML5开发Android
			● Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器和WebView默认为mdpi.hdpi相当于mdpi的 ... 
- jQuery中的CSS(二)
			一:获取样式和设置样式 
- 《SQL基础教程》
			Product表 CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, prod ... 
- 这篇文章讲得精彩-深入理解 Python 异步编程(上)!
			可惜,二和三现在还没有出来~ ~~~~~~~~~~~~~~~~~~~~~~~~~ http://python.jobbole.com/88291/ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ... 
- System.getenv()和System.getProperty() 的区别
			1.System.getenv() 方法是获取指定的环境变量的值.它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null.另外一种是不接受参数,那么返回的是 ... 
- [转] nginx配置HTTPS
			使用ssl模块配置同时支持http和https并存 一,生成证书 # 1.首先,进入你想创建证书和私钥的目录,例如: cd /etc/nginx/ # 2.创建服务器私钥,命令会让你输入一个口令: o ... 
- -webkit-line-clamp超出省略
			以前只用过超出一行显示省略号 有时候会碰到只显示两到三行,超出省略 -webkit-line-clamp属性就能解决这个问题 text-overflow: -o-ellipsis-lastline; ... 
- spoj694
			题意:求不相同的子串个数 题解: 考虑一下后缀数组 yy一下就能发现答案就是n*(n+1)/2-sigma(i=1;i<=n;i++)height[i] 代码: 
- 各种浏览器下的页面元素xpath获取方法
			参考链接: http://blog.sina.com.cn/s/blog_654c6ec70100v1i2.html 
