Solr官方提供了很强大的 Data Import Request Handler,并且提供了一个简单的schedule,我们基于此可以做自动增量索引。

1、将solr-dataimporthandler-x.x.x.jar、solr-dataimporthandler-extras-x.x.x.jar和solr-dataimportscheduler-modified.jar包放到solr的lib目录下。 其中:由于官方提供的apache-solr-dataimportscheduler-1.0.jar有一个bug,增量索引的post请求无法正常发送,网上找到了solr-dataimportscheduler-modified.jar修复了这个bug,可以到我的网盘http://pan.baidu.com/s/1mhl1StM下载。

2、修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:

  1. <listener>
  2. <listener-class>
  3. org.apache.solr.handler.dataimport.scheduler.ApplicationListener
  4. </listener-class>
  5. </listener>

3、将solr-dataimportscheduler-modified.jar中 dataimport.properties 取出并根据实际情况修改,然后放到 solrhome/conf里。注意不是自己创建的solrhome/oollection1/conf目录下。

4.data-config.xml配置

  1. <dataConfig>
  2. <dataSource name="slave1"
  3. type="JdbcDataSource"
  4. driver="com.mysql.jdbc.Driver"
  5. url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"
  6. user="test"
  7. password="test"
  8. batchSize="-1"/>
  9. <document name="products">
  10. <entity name="item" pk="ID" dataSource="slave1"
  11. query="select * from item"
  12. deltaImportQuery="select * from item where ID='${dataimporter.delta.id}'"
  13. deltaQuery="select id from item where inputtime > '${dataimporter.item.last_index_time}">
  14. <field column="ID" name="id" />
  15. <field column="CATEGORY" name="category" />
  16. <field column="SOURCE" name="source" />
  17. <entity name="feature" pk="ID"
  18. query="select description from feature where ID='${item.ID}'">
  19. <field column="DESCRIPTION" name="description" />
  20. </entity>
  21. </entity>
  22. </document>
  23. </dataConfig>

其中: - query是获取全部数据的SQL - deltaImportQuery是根据增量数据ID获取增量数据时使用的SQL - deltaQuery是获取增量数据ID的SQL

5.dataimport.properties 配置项,对应上面的data-config.xml

  1. #################################################
  2. # #
  3. # dataimport scheduler properties #
  4. # #
  5. #################################################
  6. # to sync or not to sync
  7. # 1 - active; anything else - inactive
  8. syncEnabled=1
  9. # which cores to schedule
  10. # in a multi-core environment you can decide which cores you want syncronized
  11. # leave empty or comment it out if using single-core deployment
  12. syncCores=collection1
  13. # solr server name or IP address
  14. # [defaults to localhost if empty]
  15. server=127.0.0.1
  16. # solr server port
  17. # [defaults to 80 if empty]
  18. port=8080
  19. # application name/context
  20. # [defaults to current ServletContextListener's context (app) name]
  21. webapp=solr
  22. # URL params [mandatory]
  23. # remainder of URL
  24. params=/dataimport?command=delta-import&clean=false&commit=true&entity=item
  25. # schedule interval
  26. # number of minutes between two runs
  27. # [defaults to 30 if empty]
  28. interval=30

6、重启tomcat,当有新数据的时候,发现会自动更新。

浏览 517 评论 0 赞 0 砸 0 标签: solr
评论
还可以再输入500个字

请您注意

·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款