zoukankan      html  css  js  c++  java
  • solr定时增量索引

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

    将solr/dist下的solr-dataimporthandler-4.8.1.jar、solr-dataimporthandler-extras-4.8.1.jar这两个包拷贝到tomcat/webapps/solr/lib下,还有下载apache-solr-dataimportscheduler.jar也拷贝到tomcat/webapps/solr/lib下,下载链接apache-solr-dataimportscheduler.jar的下载链接。

    修改solrhomemycoreconf下的data-config.xml文件。

    <dataConfig>
        <dataSource type="JdbcDataSource"
                  driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/courseman"
                  user="root"
                  password="mysql" />
        <document>
            
            <entity pk="ID"  dataSource="courseman" name="student" query="select  *  from student WHERE deleteStatus=0 "   
                  deltaQuery="select ID  from student where createTime > '${dataimporter.last_index_time}'"   
                        deletedPkQuery="select ID from student where deleteStatus=1"             
                  deltaImportQuery="select * from student where ID='${dataimporter.delta.ID}'" >
                  
                <field column="ID" name="id" />
                <field column="name" name="name" />
                <field column="gender" name="gender" />
                <field column="major" name="major" />
                <field column="grade" name="grade" />
                <field column="deleteStatus" name="deleteStatus" />
                <field column="createTime" name="createTime" />
                <field column="updateTime" name="updateTime" />
                
              </entity>
        </document>
    </dataConfig>
    1. query查询是指查询出表里所有的符合条件的数据,因为我的数据库student表中的数据是根据deleteStatus来查询的。类型是boolean。这来要查询的所有符合条件的结果根据实际情况定。也可以是int类型的。是第一次查询的数据,或者是full-import的数据。
    2. deltaQuery的意思是,查询出所有经过修改的记录的ID,可能是修改,添加,删除等操作产生的  (这里查询只对增量导入起作用,即查询的是新增的数据,而且只能返回ID值) 。
    3. deletedPkQuery查询那些数据库里伪删除的数据的ID。这里deleteStatus=1,删除状态为1,表示删除的数据。创建索引的时候不会将这些数据添加进来。
    4. deltaImportQuery该查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据   对索引库进行更新操作,可能是删除,添加,修改 (该查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列) ,即通过2、3步的查询结果,进行匹配.

    假如deltaQuery满足条件有5条数据,deletedPkQuery满足条件有3条数据,那么这5条数据就会被更新进来,这3条数据呢就会被删除掉,原有的数据还存在。是根据原有的数据更新的。具体是怎么样的还有待研究。

    在tomcatwebappssolrWEB-INFweb.xml加入这句话:

    <listener>  
                 <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>  
       </listener>  

    这个class是在apache-solr-dataimportscheduler.jar包下的。

    在solrhome文件下创建conf文件夹,原本是没有的,要自己创建。不是solrhomemycoreconf。启动tomcat的时候他会去找solr目录下homeconf。如果没有找到,启动报错,访问不到路径,报404错。

    他是根据这个配置的。

    <?xml version="1.0" encoding="utf-8"?>
    
    <Context docBase="D:work-toolserversolrserversolr-4.8.1.war" reloadable="true" >
    
          <Environment name="solr/home" type="java.lang.String" value="D:work-toolserversolrhome" override="true" />
    
    </Context>
    D:work-toolserversolrhomeconfdataimport.properties

    在这个conf文件下创建dataimport.properties并添加内容

    interval=1
    port=8983
    server=localhost
    params=/dataimport?command=delta-import&clean=false&commit=true
    webapp=solr
    reBuildIndexInterval=1
    syncEnabled=1
    reBuildIndexBeginTime=03:10:00
    reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
    syncCores=mycore

    interval:

    port:solr的端口

    server:solr的路径

    webapp:solr名称

    syncCores:索引库位置,可以多个,用逗号隔开。

    apache-solr-dataimportscheduler的源代码里面有个错误,应该把POST请求改为GET请求。不然他会报415错误。

  • 相关阅读:
    JVM内存模型
    学习Spring Boot:(十九)Shiro 中使用缓存
    学习Spring Boot:(十八)Spring Boot 中session共享
    学习Spring Boot:(十七)Spring Boot 中使用 Redis
    学习Spring Boot:(十六)使用Shiro与JWT 实现认证服务
    学习Spring Boot:(十五)使用Lombok来优雅的编码
    学习Spring Boot:(十四)spring-shiro的密码加密
    学习Spring Boot:(十三)配置 Shiro 权限认证
    学习Spring Boot:(十二)Mybatis 中自定义枚举转换器
    学习Spring Boot:(十一) 自定义装配参数
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4229696.html
Copyright © 2011-2022 走看看