设为首页 收藏本站
查看: 1360|回复: 0

[经验分享] 关于solr配置自动定时增量导入数据到索引库

[复制链接]

尚未签到

发表于 2017-12-19 18:55:22 | 显示全部楼层 |阅读模式
  开始之前,可以参考上篇博文增量索引-数据导入并索引:
  http://josh-persistence.iteye.com/admin/blogs/2017059
  Solr增量索引配置
  一、开始增量索引前的准备工作。
  1、data-config.xml中必要的属性
  <!--  transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签   --->
  <!--  query:查询数据库表符合记录数据   --->
  <!--  deltaQuery:增量索引查询主键ID    --->    注意这个只能返回ID字段
  <!--  deltaImportQuery:增量索引查询导入的数据  --->
  <!--  deletedPkQuery:增量索引删除主键ID查询  ---> 注意这个只能返回ID字段
   最主要的是我们要知道这样一个事实: last_index_time是DataImportHandler的一个默认字段,
  我们可以在任何SQL中使用,该字段用于表明上次做full import或者是delta import(增量导入)的最后一次时间。在SQL中可以使用${dih.delta.ID}来引用。
  2、数据库配置注意事项
  1)、如果只涉及添加与修改业务,那么数据库里只需添加一个类型为timpstamp,默认值为当前系统时间的字段 :CURRENT_TIMESTAMP(mysql)
  2)、如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的用0,1来标识,此条记录是否被删除,当然也可以用其他字段标识,ture或false都可以
  3、最重要的dataimporter.properties
  C:\solr-tomcat\solr\testcore\conf新建一个文件:dataimport.properties, 这个配置文件很重要,它是用来记录当前时间与上一次修改时间的,通过该配置文件可以找出新增的、修改的或者删除的记录。实例:
  

<dataConfig>  <!--- 此段话配置的是一个MySQL的数据源,(数据源也可以配置在solrconfig.xml中)  --->  
  <dataSource name="acitvityDB" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost/test" user="swang6" password="swang6"/>  
  <document>         
  <entity pk="ID"  dataSource="acitvityDB" name="myentity"
  query="select * from myentity WHERE isdelete=0"  

  deltaQuery="select>  '${dataimporter.last_index_time}'"  

  deletedPkQuery="select>
  deltaImportQuery="select * from myentity where>
  <!-- >  <field column="ID" name="id"/>  
  <field column="name" name="name"/>  
  <field column="address" name="address"/>  
  <field column="age" name="age"/>  
  <field column="my_date" name="my_date"/>  
  <field column="isdelete" name="isdelete"/>  
  

  </entity>
  </document>
  
</dataConfig>
  

  对dataimporter.properties的解释:
  

<!--  pk="ID" 必须,因为其中的增量索引查询主键ID时需要  -->  <!--  dataSource="acitvityDB" 这个引用名字是引用上面数据源的名字 -->  
  <!--  name="myentity" 存在多个实体时,这个名字必须唯一 -->  
  <!--  query:用于全量导入而非增量导入
  query="select * from myentity WHERE isdelete=0  
  query查询是指查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以  
  where后面有一个限定条件isdelete=0,意思为查询未被删除的数据   
  -->
  

  <!--  deltaQuery : 用于增量导入且只返回ID

  deltaQuery="select>  '${dih.last_index_time}'"  
  deltaQuery的意思是,查询出所有经过修改的记录的ID  
  可能是修改操作,添加操作,删除操作产生的   
  -->  
  

  <!--  deletedPkQuery : 用于增量导入且只返回ID

  deletedPkQuery="select>  此操作只查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)  
  solr通过它来删除索引里面对应的数据
  -->
  <!--  deltaImportQuery: 增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列

  deltaImportQuery="select * from myentity where>  deltaImportQuery查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据  
  对索引库进行更新操作,可能是删除,添加,修改  
  -->
  

  做了以上配置后,可以设置linux的cron job或者Spring 的TaskSchuduler或者Cron Job后,可以定时发url:
  http://localhost:8983/solr/dataimport?command=delta-import去做增量索引。更多关于Solr做增量索引的说明文档:http://wiki.apache.org/solr/DataImportHandler
  当然也可以用Solr自带的Scheduler来做增量索引:
  http://wiki.apache.org/solr/DataImportHandler#Scheduling

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425794-1-1.html 上篇帖子: 使用jetty部署配置solr服务 下篇帖子: python对solr进行查询、插入操作(GET\POST)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表