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重新装载起来时才可见。 实现代码如下:

  1. /**
  2. * 合并索引数据
  3. * @param otherIndexPathList 其他待合并的索引数据路径
  4. * @param coreName 合并的目标solr核名称
  5. *
  6. */    private void mergeIndexData(List<String> otherIndexPathList, String coreName) {
  7. if (null != otherIndexPathList && otherIndexPathList.size() > 0) {
  8. HttpClient client = new HttpClient();
  9. client.setConnectionTimeout(20000);
  10. client.setTimeout(20000);
  11. client.setHttpConnectionFactoryTimeout(20000);
  12. StringBuffer sb = new StringBuffer();
  13. for (int i = 0; i < otherIndexPathList.size(); ++i) {
  14. sb.append("&indexDir=" + otherIndexPathList.get(i) + "/data/index");
  15. }
  16. String mergeIndexCMD = "http://" + Constants.LOCAL_ADDRESS + ":" + this.port  + "/admin/cores?action=mergeindexes&core="+ coreName;
  17. if (sb.length() > 0) {
  18. mergeIndexCMD += sb.toString();
  19. }
  20. HttpMethod method = new GetMethod(mergeIndexCMD);
  21. method.getParams().setContentCharset("GBK");
  22. method.getParams().setHttpElementCharset("GBK");
  23. method.getParams().setCredentialCharset("GBK");
  24. // execute the method.
  25. try {
  26. if (client.executeMethod(method) == 200) {
  27. String response = method.getResponseBodyAsString();
  28. if (logger.isInfoEnabled()) {
  29. logger.info("merge result" + response);
  30. }
  31. }
  32. } catch (Exception e) {
  33. logger.error("合并其他索引数据失败 " + coreName + ",索引目录: " + otherIndexPathList, e);
  34. }
  35. //commit操作让合并后的索引对搜索生效
  36. StreamingUpdateSolrServer httpSolrServer = null;
  37. httpSolrServer = getSolrServer(Constants.LOCAL_ADDRESS, this.port, coreName);
  38. try {
  39. httpSolrServer.commit();
  40. } catch (Exception e) {
  41. }
  42. }
  43. }

第二种方法是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包装嘛。。。

转载于:https://blog.51cto.com/phinecos/815355

每日学习笔记(20)相关推荐

  1. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...

  2. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  3. 2020-4-20 深度学习笔记20 - 深度生成模型 3 (实值数据上的玻尔兹曼机)

    第二十章 深度生成模型 Deep Generative Models 中文 英文 2020-4-17 深度学习笔记20 - 深度生成模型 1 (玻尔兹曼机,受限玻尔兹曼机RBM) 2020-4-18 ...

  4. 2020-4-22 深度学习笔记20 - 深度生成模型 5 (有向生成网络--sigmoid信念网络/可微生成器网络/变分自编码器VAE/生产对抗网络GAN/生成矩匹配网络)

    第二十章 深度生成模型 Deep Generative Models 中文 英文 2020-4-17 深度学习笔记20 - 深度生成模型 1 (玻尔兹曼机,受限玻尔兹曼机RBM) 2020-4-18 ...

  5. 编译原理学习笔记20——符号表

    编译原理学习笔记20--符号表 20.1 符号表的组织与操作 20.2 符号表的内容 20.3 利用符号表分析名字的作用域 20.1 符号表的组织与操作 符号表 符号表的作用与组织 符号表的整理和查找 ...

  6. 小猫爪:S32K3学习笔记20:S32K3之SCST及其应用

    小猫爪:S32K3学习笔记20:S32K3之SCST及其应用 1 前言 2 SCST简介 3 移植 4 应用 4.1 启动测试 4.2 使能FPU相关测试项 4.3 49号测试项中的MPU配置 4.4 ...

  7. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  8. opencv学习笔记20:图像轮廓

    图像轮廓 Contours:轮廓 轮廓是将没有连着一起的边缘连着一起. 边缘检测检测出边缘,边缘有些未连接在一起. 注意问题 1.对象为二值图像,首先进行阈值分割或者边缘检测. 2.查找轮廓需要更改原 ...

  9. cs224w(图机器学习)2021冬季课程学习笔记20 Advanced Topics on GNNs

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Advanced Topics on GNNs 2. Limitations of Grap ...

  10. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

最新文章

  1. Caffe源码中io文件分析
  2. 你向 Mysql 数据库插入 100w 条数据用了多久?
  3. 哈佛新冠论文用百度写,川普很满意,英国媒体BBC都看不下去:好歹搜索方法要用对呀!...
  4. go slice获取唯一值_Go语言引用传递与值传递
  5. 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程
  6. webService 远程访问不了的问题
  7. git分支指的是_你一定知道的Git分支模型
  8. maven打包跳过Test
  9. html提供的常用的页面交换元素有哪些,一些常用网页制作代码收集汇总
  10. Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解
  11. python 代码命令大全-用什么库写 Python 命令行程序(示例代码详解)
  12. Ubuntu18.04安装Android Studio
  13. FGUI使用方法(四):List列表的详细使用方式,包括List嵌套List
  14. Ubuntu 14.04下360/小米/百度等随身Wifi驱动安装方法
  15. android修行之路----经典书籍
  16. 2021年需要关注的15大软件测试趋势(一)
  17. 【无标题】人工智能的定义
  18. 广州坐标系转换大地2000_市级2000国家大地坐标转换
  19. 怎么更换当前电脑的ip(ip被网站封了无法访问怎么办)
  20. USB协议和接口梳理,Type-C,USB3.0,USB3.1,线序

热门文章

  1. [Android] 查看MTD,EMMC,MMC三种设备的分区
  2. Linux ELF文件学习(1)
  3. SylixOS arm64 异常向量表
  4. kvm安装android虚拟机,qemu-kvm安装虚拟机
  5. centos8网络配置开启wifi_在centos 8中安装各种路由协议
  6. 面向对象15:单例设计模式、main方法的使用
  7. ws配置 zuul_spring cloud zuul 服务网关
  8. 计算机上可以插键盘吗,电脑键盘上这些按键竟然可以这样用?
  9. c判断数组是否为空_剑指offer编程题 1.二维数组中的查找
  10. opencv画框显示python_Python OpenCV实现鼠标画框效果