美文网首页Elasticsearch Solr 全文搜索
Solr全量更新/增量更新(要配置数据库)

Solr全量更新/增量更新(要配置数据库)

作者: 宇宙小神特别萌 | 来源:发表于2019-08-23 14:43 被阅读0次
Solr全量更新、增量更新(要配置数据库)目录.png

一、Solr全量更新/增量更新(要配置数据库)

1、全量更新

参考 Solr 连接数据库.md 配置,完成后:


记住:clean=true、commit=true

2、增量更新

1.首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 、data-config.xml里面的数据

  <!--  transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签   --->
  <!--  query:查询数据库表符合记录数据   --->
  <!--  deltaQuery:增量索引查询主键ID    --->    注意这个只能返回ID字段
  <!--  deltaImportQuery:增量索引查询导入数据  --->
  <!--  deletedPkQuery:增量索引删除主键ID查询  ---> 注意这个只能返回ID字段
  

2.数据库配置注意事项

1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个timpstamp字段
就可以了,默认值为当前系统时间,CURRENT_TIMESTAMP
2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的
用0,1来标识,此条记录是否被删除

3.dataimporter.properties

这个配置文件很重要,它是用来记录当前时间与上一次修改时间的,通过它能够找出,那些,新添加的,修改的,或删除的记录标识,此条记录是否被删除的记录

4.增量更新就是在全量更新的基础上加上一些配置,data-config.xml配置如下:

原配置:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource 
    type="JdbcDataSource" 
    driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@localhost:1521:ORCL" 
    user="duke" 
    password="duke" /> 
    <document>
        <entity name="userEntity" query="select ID, NAME,AGE from t_user">
            <!--查询的数据和数据库索引意义对应column 是查询的字段name 是solr索引对应的字段-->
            <field column="ID" name="user_id"/> 
            <field column="NAME" name="user_name"/> 
            <field column="AGE" name="user_age"/> 
        </entity>
    </document>
</dataConfig>

增量更新配置:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource 
    type="JdbcDataSource" 
    driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@localhost:1521:ORCL" 
    user="duke" 
    password="duke" /> 
    <document>
        <entity name="userEntity" query="select ID,NAME,AGE from t_user"
        deltaImportQuery ="select ID,NAME,AGE from t_user t where t.ID='${dataimport.delta.id}'"
        deltaQuery = "select ID from t_user t where t.LASTUPDATETIME='${dataimport.last_index_time}'"
        deletedPkQuery = "select ID from t_user">
            <field column="ID" name="user_id"/> 
            <field column="NAME" name="user_name"/> 
            <field column="AGE" name="user_age"/> 
            <field column="LASTUPDATETIME" name="user_lastUpdateTime"/> 
        </entity>
    </document>
</dataConfig>

<!--  下面分别来介绍属性(如有错误,欢迎指出) -->
             <!--  pk="ID" 这个很有必要,因为其中的增量索引查询主键ID时需要  -->
              <!--  dataSource="mydb"   这个引用名字是引用上面数据源的名字 -->
              <!--  name="myinfo"   这个名字必须唯一,存在多个实体时 -->
               <!--  query="select  *  from myinfo WHERE isdelete=0   query查询是指
               查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以
               where  后面有一个限定条件isdelete=0,意思为查询未被删除的数据
               
               (注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)
               -->
               <!--
               deltaQuery="select productId from product where modifyTime > '${dataimporter.last_index_time}'"
               deltaQuery的意思是,查询出所有经过修改的记录的ID
               可能是修改操作,添加操作,删除操作产生的
               (此查询只对增量导入起作用,而且只能返回ID值)
               -->
               <!--
               deletedPkQuery="select productId from product where isdelete=-1" 
               此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为-1的数据)
               solr通过它来删除索引里面对应的数据
               (此查询只对增量导入起作用,而且只能返回ID值)
               -->
               <!--
                deltaImportQuery="select * from product where productId = '${dih.delta.productId}'"
                次查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
                对索引库进行更新操作,可能是删除,添加,修改
                (此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)
               -->

5.通过后台管理手动增量更新和通过浏览器手动更新

在浏览器直接输入网站 :
http://127.0.0.1:8983/solr/#/corename/dataimport//dataimport
记住:clean=false、commit=true

二、solr 常见的自动更新方式

方式一:solr 自带的增量更新更新

1.下载jar包
apache-solr-dataimportscheduler.jar、solr-dataimporthandler-8.2.0.jar、solr-dataimporthandler-extras-8.2.0.jar到 solr 项目的\WEB-INF\lib 目录下。

下载地址:链接:https://pan.baidu.com/s/13p_WxqtxJQQ6OzfNgtcWlw
提取码:6a9y

2. 修改web.xml文件配置监听,在servlet节点前增加:

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

3.创建 dataimport.properties
在solrHome(存储solr数据的目录) 的目录下创建conf文件夹,创建 dataimport.properties 文件,内容根据实际情况修改,内容如下:

#################################################
#                                              #
#      dataimport scheduler properties        #
#                                              #
#################################################
 
#  tosync or not to sync
#  1- active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
 
# which cores to schedule
#  ina multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
#  修改成你所使用的core,我这里是我自定义的core:simple
syncCores=active
 
# solr server name or IP address
# [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
 
# solr server port
# [defaults to 80 if empty]
#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8089
 
# application name/context
# [defaults to current ServletContextListener's context (app) name]
#  这里默认不改
webapp=solr
 
# URL params [mandatory]
# remainder of URL
#  这里改成下面的形式,solr同步数据时请求的链接
params=/dataimport?command=delta-import&clean=false&commit=true
 
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
#  开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
 
#  重做索引的时间间隔,单位分钟,默认7200,即5天;
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
 
#  重做索引的参数
reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true
 
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

最后重启solr,在数据库中添加一条数据,静等一分钟,然后query。因为我们设置的是一分钟监听一次

4.data-config.xml文件中内容如下

 <?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource 
    type="JdbcDataSource" 
    driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@localhost:1521:ORCL" 
    user="duke" 
    password="duke" /> 
    <document>
        <entity name="userEntity" query="select ID,NAME,AGE from t_user"
        deltaImportQuery ="select ID,NAME,AGE from t_user t where t.ID='${dataimport.delta.id}'"
        deltaQuery = "select ID from t_user t where t.LASTUPDATETIME='${dataimport.last_index_time}'"
        deletedPkQuery = "select ID from t_user">
            <field column="ID" name="user_id"/> 
            <field column="NAME" name="user_name"/> 
            <field column="AGE" name="user_age"/> 
            <field column="LASTUPDATETIME" name="user_lastUpdateTime"/> 
        </entity>
    </document>
</dataConfig>

            <!--  下面分别来介绍属性(如有错误,欢迎指出) -->
             <!--  pk="ID" 这个很有必要,因为其中的增量索引查询主键ID时需要  -->
              <!--  dataSource="mydb"   这个引用名字是引用上面数据源的名字 -->
              <!--  name="myinfo"   这个名字必须唯一,存在多个实体时 -->
               <!--  query="select  *  from myinfo WHERE isdelete=0   query查询是指
               查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以
               where  后面有一个限定条件isdelete=0,意思为查询未被删除的数据
            (注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)
           -->
           <!--
           deltaQuery="select productId from product where modifyTime > '${dataimporter.last_index_time}'"
           deltaQuery的意思是,查询出所有经过修改的记录的ID
           可能是修改操作,添加操作,删除操作产生的
           (此查询只对增量导入起作用,而且只能返回ID值)
           -->
           <!--
           deletedPkQuery="select productId from product where isdelete=-1" 
           此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为-1的数据)
           solr通过它来删除索引里面对应的数据
           (此查询只对增量导入起作用,而且只能返回ID值)
           -->
           <!--
            deltaImportQuery="select * from product where productId = '${dih.delta.productId}'"
            次查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
            对索引库进行更新操作,可能是删除,添加,修改
            (此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)
           -->

方式二:使用windows 的计划任务进行增量更新

此方法,用于tomcat下部署的solr。

1.在windows开始那里搜索“计划任务”

solr计划任务1.jpg

2.创建一个新的计划任务

solr计划任务2.jpg

3.对计划任务的常规、触发器、操作 进行设置

solr计划任务3.jpg solr计划任务4.jpg solr计划任务5.jpg

4.启动计划任务

5.solr.bat 中的内容为(使用curl进行模拟请求,curl 需要下载):

curl http://localhost:8089/solr/active/dataimport?command=delta-import^&clean=false^&commit=true

6.windows 的curl 需要下载配置环境变量(和jdk的差不多),curl下载地址为:

链接:https://pan.baidu.com/s/1CArPu0vdPGGWRfo8KuZxWg 提取码:09ks (64位系统的,32位的可以去官网下载)

方式三:linux下使用 crontab实现增量更新

此方法,用于tomcat下部署的solr。

1.修改crontab的配置文件:vim /etc/crontab

crontab -e
*/5 * * * * curl http://localhost:8089/solr/active/dataimport?command=delta-import^&clean=false^&commit=true

注:5分钟执行一次增量索引(可根据实际业务调整时间)

相关文章

  • Solr全量更新/增量更新(要配置数据库)

    一、Solr全量更新/增量更新(要配置数据库) 1、全量更新 参考 Solr 连接数据库.md 配置,完成后: 2...

  • ReactNative热更新&拆包

    目录 1)全量热更新-Android 2)拆包增量更新-Android 3)图片增量更新-Android 4)全量...

  • 手把手玩Android 增量更新

    前言: 增量更新已经出来几年了,而一些大的公司早就实现了增量更新。增量更新相较于全量更新的好处不言而喻,利用差分算...

  • RN用自己的服务器热更新

    不使用第三方,用自己的服务器更新。 RN的热更新其实就是替换App加载的js包,更新分为全量更新和增量更新; 全量...

  • solr系列3——solr数据同步(全量、增量)

    solr 数据同步,全量、增量方式 DIH全量同步(全表数据)(一般做第一次数据同步) 首先创建对应的数据库表 s...

  • solr启动与数据更新

    背景:solr安装完成 根据数据生成result.json文件,然后将json文件更新到数据库。 更新时,先删除全...

  • 全量更新和增量更新区别。

    1 全量更新,就是所有参数都传给后台,全部入库。 2 增量更新,则是传一部分参数,然后更新传递的参数。 以上两点是...

  • 一个简单好用的java增量更新工具

    java web 上正式的时候总是会需要更新代码,但是要求不能全量更新代码,只能提供增量更新包,减少不必要的更新。...

  • Bugly热更新集成详解

    前言 更新一直是一个很重要的点,从最开始的全量更新,到我之前讲过的增量更新,当然也到今天我要讲的bugly热更新。...

  • Solr全量与增量导入

    Solr Full Import全量导入 所谓全量索引一般指的是每次从数据库中读取需要导入的全部数据,然后提交到S...

网友评论

    本文标题:Solr全量更新/增量更新(要配置数据库)

    本文链接:https://www.haomeiwen.com/subject/gcftectx.html