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

[经验分享] 每日学习笔记(20)

[复制链接]

尚未签到

发表于 2018-11-2 07:02:35 | 显示全部楼层 |阅读模式
  1, Solr合并索引数据有两种方法,第一种是1.4版本中引入的,通过CoreAdminHandler来实现,示例如下: http://localhost:8983/solr/admin/cores?action=mergeindexes&core=core0&indexDir=/opt/solr/core1/data/index&indexDir=/opt/solr/core2/data/index     上述命令会将core1和core2的索引合并到core0中去,这里最值得注意的一点是:一旦合并完成,必须在core0上调用commit操作,否则索引数据的变化对于searchers来说是暂时不可见的,只有等到下次core0重新装载起来时才可见。     实现代码如下:
  


  • /**
  • * 合并索引数据
  • * @param otherIndexPathList 其他待合并的索引数据路径
  • * @param coreName 合并的目标solr核名称
  • *
  • */    private void mergeIndexData(List otherIndexPathList, String coreName) {
  •     if (null != otherIndexPathList && otherIndexPathList.size() > 0) {
  •         HttpClient client = new HttpClient();
  •         client.setConnectionTimeout(20000);
  •         client.setTimeout(20000);
  •         client.setHttpConnectionFactoryTimeout(20000);

  •         StringBuffer sb = new StringBuffer();
  •         for (int i = 0; i < otherIndexPathList.size(); ++i) {
  •             sb.append(&quot;&indexDir=&quot; + otherIndexPathList.get(i) + &quot;/data/index&quot;);
  •         }
  •         String mergeIndexCMD = &quot;http://&quot; + Constants.LOCAL_ADDRESS + &quot;:&quot; + this.port  + &quot;/admin/cores?action=mergeindexes&core=&quot;+ coreName;
  •         if (sb.length() > 0) {
  •             mergeIndexCMD += sb.toString();
  •         }
  •         HttpMethod method = new GetMethod(mergeIndexCMD);
  •         method.getParams().setContentCharset(&quot;GBK&quot;);
  •         method.getParams().setHttpElementCharset(&quot;GBK&quot;);
  •         method.getParams().setCredentialCharset(&quot;GBK&quot;);

  •         // execute the method.
  •         try {
  •             if (client.executeMethod(method) == 200) {
  •                 String response = method.getResponseBodyAsString();
  •                 if (logger.isInfoEnabled()) {
  •                     logger.info(&quot;merge result&quot; + response);
  •                 }
  •             }
  •         } catch (Exception e) {
  •             logger.error(&quot;合并其他索引数据失败 &quot; + coreName + &quot;,索引目录: &quot; + otherIndexPathList, e);
  •         }

  •         //commit操作让合并后的索引对搜索生效
  •         StreamingUpdateSolrServer httpSolrServer = null;
  •         httpSolrServer = getSolrServer(Constants.LOCAL_ADDRESS, this.port, coreName);
  •         try {
  •             httpSolrServer.commit();
  •         } catch (Exception e) {
  •         }
  •     }
  • }

  

  第二种方法是Solr3.3中引入的,也是通过CoreAdminHandler来实现,示例如下:
  http://localhost:8983/solr/admin/cores?action=mergeindexes&core=core0&srcCore=core1&srcCore=core2
  同第一种方法一样,一旦合并完成,必须在core0上调用commit操作,否则索引数据的变化对于searchers来说是暂时不可见的,只有等到下次core0重新装载起来时才可见。
  使用”srcCore”和”indexDir”这两种方法的区别:
  1)    使用”indexDir”参数,你可以合并不是与Solr核相关联的索引数据,比如通过Lucene直接创建的索引
  2)    使用”indexDir”参数,你必须注意索引数据不是直接写入的,这就意味着如果它是一个solr核的索引,必须要关闭IndexWriter,这样才能触发一个commit命令。
  3)    “indexDir”必须指向solr核所在的主机上的磁盘路径,这就限制比较多了,而相反,你可以只给srcCore一个solr核的名称,而不关心它的实际索引路径在哪。
  4)    使用”srcCore”,你必须确保即使源索引数据同时存在写操作的时候,合并后的索引页不会损坏。
  2,   solr索引合并的时候,底层其实调用的还是Lucene,因此你schema.xml中配置的uniqueKeys它并不知道,因此当你对两个包含相同文档(由uniqueKey确定)的索引进行合并时,你会得到双倍的文档数,solr这个地方应该改下,毕竟你不是简单的Lucene包装嘛。。。



运维网声明 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-629542-1-1.html 上篇帖子: Solr 使用自定义 Query Parser 下篇帖子: Nutch1.3集成Solr网页快照功能实现(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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