gpt4 book ai didi

indexing - Solr 重新索引大型文档语料库的方法

转载 作者:行者123 更新时间:2023-12-04 21:24:30 25 4
gpt4 key购买 nike

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

  • 新功能介绍
    搜索现有的语料库
    需要额外的架构字段
    我们不能总是预料到
    提前
  • 语料库被多个索引
    碎片。当它成长到一定程度
    阈值,我们需要创造更多
    分片和重新平衡文件
    均匀地分布在所有这些(
    SolrCloud 好像还没有
    支持)。

  • 当前索引接收非常频繁的更新和添加,需要在几分钟内可供搜索。因此,离线批量重新索引语料库的方法实际上并不奏效,因为在批处理完成时,新文档将可用。

    我们目前正在研究的方法是:
  • 创建一个新的分片集群并
    批量重新索引,而旧的
    集群仍然可用
    搜索。不属于的新文件
    部分重新索引的批次被发送
    到旧集群和新集群
    簇。准备好切换时,指向
    负载均衡器到新集群。
  • 使用 CoreAdmin:每生成一个新核心
    分片并发送重新索引的批次
    到新核心。新文件
    不是重新索引批次的一部分
    被发送到旧内核和
    新核心。准备切换时,
    使用 CoreAdmin 动态交换
    核心。

  • 如果人们可以在其中一种或所有这些方法中确认或戳破洞,我们将不胜感激。一种比另一种更合适吗?还是我们完全关闭了?先感谢您。

    最佳答案

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

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

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

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

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

    当一个主要的重新索引操作发生时,我从负载平衡器中删除一个从站并关闭另一个的轮询。因此,面向客户的 Solr 数据库现在没有与主数据库同步,而另一个正在更新。一旦重新索引完成并且离线从数据库同步,我将它添加回负载均衡器,从负载均衡器中删除另一个从数据库,并重新配置它以与主数据库同步。

    到目前为止,这运作得非常好。我们的数据库中目前有大约 500 万个文档,这个数字将在多个集群中扩展得更高。

    希望这可以帮助!

    关于indexing - Solr 重新索引大型文档语料库的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944493/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com