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

[经验分享] Solr 4.x定时、实时增量索引

[复制链接]

尚未签到

发表于 2015-11-12 10:31:36 | 显示全部楼层 |阅读模式
  开始之前,可以参考上篇博文增量索引-数据导入并索引:
  http://josh-persistence.iyunv.com/admin/blogs/2017059
  
  Solr增量索引配置
  
  一、开始增量索引前的准备工作。
  1、认识data-config.xml中相关属性
         <!--  transformer &#26684;式转化:HTMLStripTransforme表示 索引中将忽略HTML标签   --->
         <!--  query:  查询数据库表符合记录数据   --->
       <!--  deltaQuery:增量索引   查询主键ID    --->    注意这个query只返回ID字段
       <!--  deltaImportQuery:增量索引   查询导入的数据  --->
       <!--  deletedPkQuery:增量索引  删除主键ID查询  ---> 注意这个只返回ID字段

   最主要的是我们要知道这样一个事实: last_index_time是DataImportHandler的一个默认字段,(可查看conf目录下的dataimporter.properties文件)
  我们可以在任何SQL中引用,该字段用于表明上次做full import或者是delta import(增量导入)的最后一次时间。
  
  2、数据库配置注意事项
  1)、如果只涉及添加与修改业务,那么数据库里只需添加一个类型为timpstamp,默认&#20540;为当前系统时间的字段 :CURRENT_TIMESTAMP(mysql)
  
  2)、如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的用0,1来标识,此条记录是否被删除,当然也可以用其他字段标识,ture或false都可以
  
   3、dataimporter.properties / {corename}_dataimporter.properties
  在C:\solr-tomcat\solr\item\conf中查看是否存在文件dataimporter.properties,如果没有,则新建该文件。
  这个配置文件很重要,它是用来记录索引的最新一次修改时间的,通过该配置文件可以找出新增的、修改的或者删除的记录。相关实例:
  
  在data-config中添加如下配置信息。
  

  

  • <dataConfig>
  •    <!--- 此段话配置的是一个MySQL的数据源,(数据源也可以配置在solrconfig.xml中)  --->  <dataSource name=&quot;activityDB&quot; type=&quot;JdbcDataSource&quot; driver=&quot;com.mysql.jdbc.Driver&quot; url=&quot;jdbc:mysql://localhost/test&quot; user=&quot;swang6&quot; password=&quot;swang6&quot;/>
  •        <document>
  •           <entity pk=&quot;ID&quot;  dataSource=&quot;activityDB&quot; name=&quot;myentity&quot;
  •             query=&quot;select * from myentity WHERE isdelete=0&quot;
  •          deltaQuery=&quot;select ID  from myentity where my_date >'${dih.last_index_time}'&quot;
  •             deletedPkQuery=&quot;select ID from myentity where isdelete=1&quot;
  •             deltaImportQuery=&quot;select * from myentity where ID='${dih.delta.id}&quot;>

  •           <!--  ID指定大写的,与上面语句中的对应起来---->
  •           <field column=&quot;ID&quot; name=&quot;id&quot;/>
  •           <field column=&quot;name&quot; name=&quot;name&quot;/>
  •           <field column=&quot;address&quot; name=&quot;address&quot;/>
  •           <field column=&quot;age&quot; name=&quot;age&quot;/>
  •           <field column=&quot;my_date&quot; name=&quot;my_date&quot;/>
  •           <field column=&quot;isdelete&quot; name=&quot;isdelete&quot;/>

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

  
  

  

  • <!-- pk=&quot;ID&quot; 必须,因为其中的增量索引查询主键ID时需要  -->

  •            <!--  dataSource=&quot;acitvityDB&quot; 这个引用名字是引用上面数据源的名字 -->

  •            <!--  name=&quot;myentity&quot; 存在多个实体时,这个名字必须唯一 -->

  •            <!--  query:用于全量导入而非增量导入
  •            query=&quot;select * from myentity WHERE isdelete=0
  •            query查询是指查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以
  •            where后面有一个限定条件isdelete=0,意思为查询未被删除的数据
  •            -->

  •           <!--  deltaQuery : 用于增量导入且只返回ID
  •              deltaQuery=&quot;select ID  from myentity where my_date >
  •                  '${dih.last_index_time}'&quot;
  •              deltaQuery的意思是,查询出所有经过修改的记录的ID
  •              可能是修改操作,添加操作,删除操作产生的
  •           -->

  •          <!--  deletedPkQuery : 用于增量导入且只返回ID
  •           deletedPkQuery=&quot;select ID from myentity where isdelete=1&quot;
  •           此操作只查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)
  •           solr通过它来删除索引里面对应的数据
  •          -->

  •          <!--  deltaImportQuery: 增量导入起作用,可以返回多个字段的&#20540;,一般情况下,都是返回所有字段的列
  •        deltaImportQuery=&quot;select * from myentity where ID='${dih.delta.ID}'&quot;
  •       deltaImportQuery查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
  •        对索引库进行更新操作,可能是删除,添加,修改
  •       -->

  
  
  注:如果有必要,则可以在schema.xml中添加一个timestamp的field
  <field name=&quot;timestamp&quot; type=&quot;date&quot; indexed=&quot;true&quot; stored=&quot;true&quot; default=&quot;NOW&quot; />
  
  
  做了以上配置后,可以设置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-138236-1-1.html 上篇帖子: Solr or Elasticsearch–That Is the Question 下篇帖子: Solr 报错:RemoteSolrException: Expected mime type application/octet-stream but got
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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