索引合并并不会判断uniqueKey,所以主键有重复不会判断主键会重复。

官方的解释是不要有重复。

要合并索引,它们必须满足以下要求:

  • 这两个索引必须兼容:它们的架构应该包含相同的字段,并且它们应该以相同的方式分析字段。
  • 索引不得包含重复的数据。

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 重新装载起来时才可见。

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

http://localhost:8080/searchserver/core0/update?commit=true

3,使用lucene的IndexMergeTool合并

java -classpath
./lucene-misc-3.4-SNAPSHOT.jar:./lucene-core-3.4-SNAPSHOT.jar
org.apache.lucene.misc.IndexMergeTool  mergeIndex ./data/deal/index/
./data_CJK/deal/index/

Solr合并索引方式的更多相关文章

  1. Solrj和Solr DIH索引效率对比分析

    测试软件环境: 1.16G windows7 x64  32core cpu . 2.jdk 1.7  tomcat 6.x  solr 4.8 数据库软件环境: 1.16G windows7 x64 ...

  2. solr合并集合

    当需要合并两个不同项目或者是多个分开配置的服务器时,你既可以使用lucene-misc里面的IndexMergeTool工具,也可以使用CoreAdminHandler. 要合并索引,必须满足如下要求 ...

  3. OpenGL7-3快速绘制(索引方式)

    代码下载#include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include &l ...

  4. 6、统计solr目录索引信息

    package com.main.java.solr.statistics; import org.apache.lucene.document.Document; import org.apache ...

  5. BTREE这种Mysql默认的索引方式,具有普遍的适用性

    文章转自 https://blog.csdn.net/caomiao2006/article/details/52145477 Mysql目前主要有以下几种索引方式:FULLTEXT,HASH,BTR ...

  6. Mysql几种索引方式的区别及适用情况 (转)

    文章摘自http://blog.sina.com.cn/s/blog_4aca42510102v5l2.html Mysql目前主要有以下几种索引方式:FULLTEXT,HASH,BTREE,RTRE ...

  7. [原][spark]帧序列的纹理UV索引,修改spark源码,改变纹理索引方式,支持常规帧序列

    spark的纹理索引方式是左下为最小值0 右上为最大值k ,遍历顺序为横向即: 3 4 5 0 1 2 而常规的纹理帧序列是这样的: 0 1 2 3 4 5 所以,为了让spark的纹理遍历顺序能按照 ...

  8. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  9. Mysql主要索引方式:FULLTEXT,HASH,BTREE,RTREE。

    使用方式 CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL ...

随机推荐

  1. 设置Redis最大占用内存

    https://blog.csdn.net/happyrabbit456/article/details/54945667 Redis需要设置最大占用内存吗?如果Redis内存使用超出了设置的最大值会 ...

  2. ElasticSearch:Lucene和ElasticSearch

    Lucene的概念: 关于索引 索引(index)和搜索(搜索),在lucene以及es里面索引是一个动作,即插入动作,包括创建索引以及为索引添加文档:所有则是针对索引(添加)的文档按照评分规则进行查 ...

  3. Ansible 常用模块之ping(四)

    一.ping 模块 1.用途: 测试主机之间的连通性: 2.关键字:ping 3.参数:无 4.用法: ansible all -m ping 命令简单,测试所有服务器是否与控制机网络连通:

  4. golang查看channel缓冲区的长度

    golang提供内建函数cap用于查看channel缓冲区长度. cap的定义如下: func cap(v Type) int The cap built-in function returns th ...

  5. 【转】基于keras 的神经网络股价预测模型

    from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY,YEARLY from matplotli ...

  6. 代码编辑器之notepad++

    引用及下载地址:http://www.iplaysoft.com/notepad-plus.html NotePad++ 优秀的支持语法高亮的开源免费编辑器绿色版下载 EditPlus,它始终是一款收 ...

  7. js图片预加载后触发操作

    为了使得图片加载完,再触发回调函数,需进行图片预加载处理 function loadImage(url, callback) { var img = new Image(); img.src = ur ...

  8. 移动互联网终端的touch事件,touchstart, touchend, touchmove 很棒的文章

    转载请注明: 转载自WEB前端开发(www.css119.com)-关注常见的WEB前端开发问题.最新的WEB前端开发技术(webApp开发.移动网站开发).最好的WEB前端开发工具和最全的WEB前端 ...

  9. ubuntu-docker入门到放弃(四)容器的导入导出

    上一次我们讲了如何搭建自己私有的镜像管理仓库,实际上我们使用的依然是别人或者公共的image,今天就来说说如何将自己定制化的images上传到自己的私有仓库中,以供符合自己业务场景的项目来使用,如:我 ...

  10. PyQt—QTableWidget实现翻页功能

    主要使用QTableWidget中的三个函数实现: verticalScrollBar().setSliderPosition() 设置当前滑动条的位置 verticalScrollBar().max ...