【问题标题】:How to re index data without deleting in Solr如何在 Solr 中重新索引数据而不删除
【发布时间】:2019-03-19 13:04:48
【问题描述】:

有没有办法重新索引 solr core 中的所有文档?

我已将索引时间分析器更改为托管模式中的一个字段

我的 solr 核心中有大约 600 000 个文档,而我在其他任何地方都没有这些数据。

我应该如何重新索引数据?

【问题讨论】:

  • 您的所有字段都设置为存储吗?一般来说 - 您必须从 Solr 获取所有文档,然后将它们发送回 Solr 以再次编制索引。为此,原始文本必须是可检索的,方法是设置为存储或启用 docValues 以允许重构原始值。
  • 它设置为存储,但我如何一次处理 60 万份文档,有没有办法
  • 编写一个使用/export 端点检索文档的小脚本,或者根据您今天的索引方式,Solr 中有一个隐藏的功能可能不再受支持,您可以在其中配置 DIH 以从不同的 Solr 核心检索原始文档。
  • 请不要在这里使用印度测量值。这只会让人们感到困惑。

标签: solr


【解决方案1】:

Solr 是全文索引,而不是数据库。因此,最佳做法是将数据保存在 solr 之外的其他位置,例如文件或数据库中。

因此,您唯一的解决方案是从 solr 导出数据,就像 @MatsLindh 的评论中推荐的那样 Google 将帮助您找到一种方法(或工具)将存储的数据转储/导出为 JSON 或 XML(或其他)

一旦您将文档存储在 solr 之外,将来更改架构后重新索引将很容易。

【讨论】:

    【解决方案2】:

    如果您不想使用导出然后重新索引的方法,可以使用以下方法,

    1. 转到 solr 目录并创建一个具有完全相同配置的新集合 (newCollection)。这可以使用 rsync 来实现。

      rsync -avz --exclude data oldCollection/ newCollection
      

      确保在运行 rsync 时排除数据文件夹。 (建议您在实际运行 rsync 之前也进行一次试运行)

    2. 将 core.properties 文件中的集合名称编辑为 newCollection。

    3. 重新启动 solr。您应该开始在 UI 中看到 newCollection。
    4. 现在您可以使用一个简单的脚本将数据从 oldCollection 复制到 newCollection,该脚本从 oldCollection 批量获取数据并将相同的对象发送到 newCollection。 (您可能需要处理从 oldCollection 收到的 version 字段)
    5. 现在您只需使用Swap api 交换集合即可实现此目的。管理 UI 上也有一个交换按钮:)

    尽管恕我直言,我在这里同意@The Bndr。您应该只使用 Solr 作为索引。将您的数据存储在文件/数据库中的某个位置。

    正如apache solr wiki中提到的,

    使用 Solr 作为数据源: 除非您别无选择,否则不要这样做。 Solr 并不是真正为这个角色而设计的。尽一切努力确保 Solr 稳定,但索引确实会因意外情况以及完全不受开发人员控制的事情而损坏。 Solr 4.x 及更高版本确实具有 NoSQL 功能,SolrCloud 在实现高可用性方面还有很长的路要走,但是任何软件都很难在面对任何问题时实现绝对的数据可靠性,这就是为什么备份总是很重要的原因。

    【讨论】:

      猜你喜欢
      • 2012-09-25
      • 2011-06-17
      • 2014-07-07
      • 2019-04-17
      • 2012-02-01
      • 2019-01-10
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多