Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 大型文档语料库的Solr索引方法_Indexing_Clustered Index_Solr_Bigdata - Fatal编程技术网

Indexing 大型文档语料库的Solr索引方法

Indexing 大型文档语料库的Solr索引方法,indexing,clustered-index,solr,bigdata,Indexing,Clustered Index,Solr,Bigdata,我们正在寻找一些关于在Solr中系统地重新编制索引的建议。Solr是一个不断增长的文档库(现在有几千万个,一年内有几亿个),而不需要降低当前运行的索引。需要定期重新编制索引,因为: 新的功能将围绕 搜索现有的 需要其他架构字段 这是我们无法预料的 前进 语料库是跨多个数据库建立索引的 碎片。当它增长到某个特定的时间 门槛,我们需要创造更多 碎片和重新平衡文档 均匀地分布在所有这些区域(其中 索尔克劳德似乎还没有 支持) 当前索引接收非常频繁的更新和添加,需要在几分钟内可供搜索。因此,批量脱机

我们正在寻找一些关于在Solr中系统地重新编制索引的建议。Solr是一个不断增长的文档库(现在有几千万个,一年内有几亿个),而不需要降低当前运行的索引。需要定期重新编制索引,因为:

  • 新的功能将围绕 搜索现有的 需要其他架构字段 这是我们无法预料的 前进
  • 语料库是跨多个数据库建立索引的 碎片。当它增长到某个特定的时间 门槛,我们需要创造更多 碎片和重新平衡文档 均匀地分布在所有这些区域(其中 索尔克劳德似乎还没有 支持)
当前索引接收非常频繁的更新和添加,需要在几分钟内可供搜索。因此,批量脱机重新索引语料库的方法实际上不起作用,因为当批量完成时,新文档将可用

我们目前正在研究的方法有:

  • 创建一个新的碎片和碎片集群 当旧的 群集仍可用于 搜索。新文档不是 重新编制索引的批处理的一部分已发送 既适用于旧集群,也适用于新集群 簇准备切换时,指向 将负载平衡器连接到新群集
  • 使用CoreAdmin:根据生成一个新的核心 切分并发送重新索引的批处理 到新的核心。新文件 不是重新编制索引的批处理的一部分 发送到旧核心和 新核心。准备切换时, 使用CoreAdmin动态交换 核心

如果人们能够确认或戳破其中一种或所有这些方法的漏洞,我们将不胜感激。一个比另一个更合适吗?还是我们完全离开了?提前谢谢你们。

这可能不适用于你们,但我会提供解决这个问题的方法

我们的Solr设置目前是一个单核。我们将在未来添加更多的内核,但绝大多数数据都写入单个内核

考虑到这一点,切分并不适用于我们。我研究了分布式搜索——切割数据,让不同的数据片段在不同的服务器上运行。对我来说,这似乎让事情变得太复杂了。这将使备份/恢复更加困难,而且在执行分布式搜索时,您最终会失去某些功能

我们最终采用的方法是非常简单的集群主/从设置

每个集群由一个主数据库和两个负载平衡的solr从属数据库组成。所有新数据都会写入主数据库,并且从数据库被配置为每5分钟同步一次新数据。在正常情况下,这是一个非常好的设置。在主设备上进行重新索引操作,在这种情况下,从设备仍然可以读取

当一个主要的重新索引操作发生时,我从负载平衡器中移除一个从机,并关闭对另一个从机的轮询。因此,面向客户的Solr数据库现在没有与主数据库同步,而另一个数据库正在更新。一旦重新索引完成并且脱机从属数据库处于同步状态,我会将其添加回负载平衡器,从负载平衡器中删除另一个从属数据库,然后重新配置以与主数据库同步

到目前为止,这一切都很顺利。目前,我们的数据库中有大约500万个文档,这个数字将在多个集群中扩展得更高


希望这有帮助

作为一个拥有数百万文档索引的人,我考虑过一种类似于“使用CoreAdmin:”选项的方法。我想你说得对。谢谢你,弗兰克。很高兴知道我还没有完全离开是的。。。CoreAdmin是一个非常理智的方法。嘿,Jason,非常感谢你分享这个。我们的文档数量是您的数倍,因此我们已开始分片以保持性能。我们也在研究分离r/w的主/从方法;不过,我们的首要任务是允许在接受新更新的同时重新编制索引。我们的索引不断更新,有时一分钟几次,我们真的需要在几分钟内将这些更新提供给客户,即使在主要的重新索引期间也是如此。因此,我们现在正处于实施CAREADMIN方法的中间。