加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Solr用于重新索引大型文档语料库

发布时间:2020-12-14 04:34:18 所属栏目:大数据 来源:网络整理
导读:我们正在寻找一些建议,围绕Solr系统地重新索引一个不断增长的文档集(现在有数千万,一年中有数亿),而不会使当前运行的索引失效.需要在定期基础上重新编制索引,因为: 介绍新功能 搜索现有的语料库 需要其他架构字段 这是我们无法一直期待的 预先 语料库跨多个
我们正在寻找一些建议,围绕Solr系统地重新索引一个不断增长的文档集(现在有数千万,一年中有数亿),而不会使当前运行的索引失效.需要在定期基础上重新编制索引,因为:

>介绍新功能
搜索现有的语料库
需要其他架构字段
这是我们无法一直期待的
预先
>语料库跨多个索引
碎片.当它超过一定时
门槛,我们需要创造更多
碎片和重新平衡文件
均匀地跨过所有这些(其中
SolrCloud似乎还没有
支持).

当前索引会收到非常频繁的更新和添加,需要在几分钟内进行搜索.因此,在批量脱机中重新索引语料库的方法实际上不起作用,因为批次完成时,新文档将可用.

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

>创建一个新的分片集群
旧的批量重新索引
群集仍然可用
搜索.没有的新文件
重新索引的批次的一部分被发送
旧集群和新集群
簇.准备切换时,指向
负载均衡器到新集群.
>使用CoreAdmin:每个产生一个新的核心
分片并发送重新索引的批处理
到新的核心.新文件
不属于重新编制索引的批次
发送到旧核心和
新核心.准备好切换时
使用CoreAdmin动态交换
核心.

我们很感激,如果人们可以确认或者在这些方法中的任何一个或所有方法中找到漏洞.一个比另一个更合适吗?还是我们完全脱了?先感谢您.

解决方法

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

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

考虑到这一点,分片并不适用于我们.我查看了分布式搜索 – 切割数据并在不同服务器上运行不同的切片.对我来说,这似乎太复杂了.它会使备份/恢复更加困难,并且在执行分布式搜索时最终会丢失某些功能.

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

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

当发生重大的重新索引操作时,我从负载均衡器中删除一个从站并关闭另一个从站的轮询.因此,面向Solr数据库的客户现在不与主服务器同步,而另一个正在更新.重新索引完成且离线从属数据库同步后,我将其添加回负载均衡器,从负载均衡器中删除其他从属数据库,然后重新配置它以与主站同步.

到目前为止,这一点非常有效.我们目前在我们的数据库中有大约500万个文档,这个数字在多个集群中的扩展性要高得多.

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读