【问题标题】:Index quickly a large dataset on solr在 solr 上快速索引大型数据集
【发布时间】:2025-12-21 02:10:16
【问题描述】:

我有几百万条记录,我需要在 Solr 中对它们进行索引。一旦它们被索引,它们就不会被更改,并且这些集合仅用于“读取”。我通过将 xml 文档发布到 REST api 来遵循该模式,它工作正常......即使需要一些时间(配置已针对读取和缓存进行了优化);

但我想知道......有没有更好/更快的方法 - 也许避免 HTTP/网络层?比如在本地工作以构建集合,将其复制到 solr 服务器,然后添加/交换集合?

一个选择可能是自定义 DIH 用于第二个/备份核心并在完成后交换 - 但这意味着我将不得不“吃掉”solr 上用于缓存减慢搜索的内存。

我正在寻找/希望找到一个断开连接的解决方案——比如一个命令行工具,在另一台机器上运行,配置针对写入进行了优化,然后在生产中复制核心,用新的交换旧的。

有什么想法吗?

【问题讨论】:

    标签: performance indexing solr dataset


    【解决方案1】:

    几百万条记录应该不是问题。

    检查您提交的频率,并可能禁用软提交或将其设置得更高。

    您还可以将文档从多个客户端发送到一个 Solr 实例,并获得一些多线程优势。

    您当然可以编写一个小型 SolrJ 客户端来索引到本地/嵌入式核心,然后将该核心交换到生产环境中。

    【讨论】:

    • “您当然可以编写一个小型 SolrJ 客户端来索引到本地/嵌入式核心,然后将该核心交换到生产环境中。” - 我试图找到一种方法来做到这一点,但到目前为止还没有运气。我不是一个 solr-ninja,我只是不时地这样做。知道我在哪里可以找到一个样本来开始构建吗?
    • 我不知道嵌入式 SolrJ 的任何超新鲜样本。 My own example 现在已经过时了,因为自本书以来很多 API 都发生了变化。无论如何,我会先从提交和多线程更改开始。
    • 谢谢!我想我会选择嵌入式版本。我有 1000 万个文档,并开始使用 10 个不同的进程(通过 post.jar)推送它们。 5 小时后,它成功推送了几万个,然后 solr 开始抛出 OutOfMemory 异常(具有 8GB ram 的虚拟机 - 主机有 12 个,8CPU - 主机有 16 个,并且 solr 已以“-m 6g”以独立模式启动)。奇怪...