• 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
    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/

  • 相关阅读:
    跟我一起了解koa(四)
    快速定位隐蔽的sql性能问题及调优【转载】
    PV,UV,IP
    ActiveMQ的安全机制使用及其源代码分析 [转]
    ActiveMQ中的安全机制 [转]
    ESB、SOA、EAI异同【转】
    磁盘 I/O 性能监控指标和调优方法
    PLS-00306:错误解决思路
    浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
    关于SQLSQL Server的三值逻辑简析
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/4354177.html
Copyright © 2020-2023  润新知