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
<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之定时增量索引实现的更多相关文章

  1. solr与.net系列课程(六)solr定时增量索引与安全

     solr与.net系列课程(六)solr定时增量索引与安全 solr增量索引的方式,就是一个Http请求,但是这样的请求显然不能满足要求,我们需要的是一个自动的增量索引,solr官方提供了一个定时器 ...

  2. solr定时增量索引

    当数据库的数据发生改变的时候,我们不想手动的去重新添加数据库的数据导solr索引库中,所以用到定时添加索引.增删改的数据.现在写的这些都是基于我之前做的一步步到这来的. 将solr/dist下的sol ...

  3. solr-DIH:定时增量索引

    参考:官方文档,http://wiki.apache.org/solr/DataImportHandler#Scheduling googlecode 找到:https://code.google.c ...

  4. 四、Solr数据源配置(JNDI、DIH)及定时重做索引

    简介 Solr支持很多种创建索引的方式,包括网页,xml以及数据库,因为我这边做的是企业级的搜索,所以用的是数据库建立索引.其实从数据库建立索引,很大程度上取决于原来的数据库设计. 从数据库建立索引, ...

  5. 用solr DIH 实现mysql 数据定时,增量同步到solr

    基础环境: (二)设置增量导入为定时执行的任务: 很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题. 但 ...

  6. [Solr] (源) Solr与MongoDB集成,实时增量索引

    一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...

  7. Solr与MongoDB集成,实时增量索引

    Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...

  8. solr与.net系列课程(八)solr中重跑索引的注意事项

    solr与.net系列课程(八)solr中重跑索引的注意事项 我们如果在项目中使用solr,那肯定就是把数据库中的数据跑进solr服务器中,solr有两种操作一种是新建索引,一种是增量索引,这里我们来 ...

  9. .Net程序员 Solr-5.3之旅 (三)Solr 从MSSQ导入索引数据

    阅读目录 引言 准备工作 data-config.xml schema.xml 导入数据 结尾 附件下载 引言 Other men live to eat, while I eat to live.- ...

随机推荐

  1. 关系操作符 < > = == <= >= !=

    基本类型可以用所有的操作符 对象要用equal eqauls() //用法 System.out.println(v1.equals(v2)); JAVA学习(二) STRING使用EQUALS方法和 ...

  2. php中的接口interface

    * 接口 * 1.使用关键字:interface * 2.类是对象的模板,接口是类的模板 * 3.接口看作是一个特殊的类 * 4.接口中的方法,只声明不实现,与抽象类一样 * 5.接口中的方法必须是p ...

  3. jquery----用户密码验证

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request)

    昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从源码中可以看出,Flask集成的run方法是由werkzeug中的ru ...

  5. 步步为营-56-JQuery基础

    jQuery本质还是封装好的js,只不过代码更简洁,而做的更好 使用JQuery选择器会返回一个jQuery对象,其本质是dom数组,jQuery对象可以调用JQuery方法. 1 选择器 1.1 基 ...

  6. 集合List和ArrayList的示例

    package chapter09; import java.util.ArrayList;import java.util.List; /* * List * ArrayList底层是数组 * 特点 ...

  7. Delphi数据库数据用文件流方式快速写入Excel文件

    在开发数据库应用程序中,经常要将类型相同的数据导出来,放到Excel文件中,利用Excel强大的编辑功能,对数据作进一步的加工处理.这有许多的方法,我们可以使用OLE技术,在Delphi中创建一个自动 ...

  8. C# Winform将控件作为参数传递

    最近做个Winform 的程序设计,需要将窗体的控件作为参数传递到另外一个类的函数中去使用,每次都会忘记,简单的记下来,以备即时查看. 1. 设置控件的modifier属性设置为public 2. 以 ...

  9. 基于pgrouting的最短路径规划

    最近项目上有一个计算两点最短路径的需求,即就是类似于百度地图的路径规划问题,小编研究了一段时间,并参考了相关资料,基于postgresql+postgis+pgrouting实现了简单的路径规划,计算 ...

  10. Java相关英语单词

    day1 Java概述 掌握 .JDK abbr. Java开发工具包(Java Developer's Kit) (abbr.缩写) .JRE abbr. Java运行环境(Java Runtime ...