【问题标题】:Solr index update by query通过查询更新 Solr 索引
【发布时间】:2012-02-08 11:54:49
【问题描述】:

我需要经常更新 solr 中的大量文档。例如,为 user_id = 5 设置 "online" = true 等等。但是通过 http 处理程序的索引速度非常慢。 Solr支持查询删除文档,有没有查询更新的方法?

【问题讨论】:

标签: solr


【解决方案1】:

不,很遗憾,没有像查询更新这样的功能。这将非常有用,就像一个新功能可以更新文档而无需完全重新提交;有一个 5 岁的 jira issue 。现在您应该重新提交带有更新字段的文档,如果您使用相同的uniqueKey,它们将被覆盖(这意味着删除+重新插入)。

顺便问一下,您是否为每个要更新的文档发出 http 请求?如果是,您可以加快一次提交多个文档的速度,如下所示:

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05992</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05993</field>
    <field name="office">Bridgewater</field>
  </doc>
</add>

【讨论】:

    【解决方案2】:

    查询仍然没有更新,但 2012 年的答案已过时。现在在 Solr 4.x 中有https://wiki.apache.org/solr/Atomic_Updates,因此您可以分两步完成您想做的事情,而无需访问原始文档。

    【讨论】:

    • 原子更新有限制。正如 Erick 在邮件列表中所说,它仍然是幕后的整个文档更新。使用原子更新时未列出的文档的字段必须“存储”,否则原子更新后它们的原始值可能会丢失,因为我认为它从原始索引中检索此类未列出字段的值,并将它们与列出的字段组合以进行原子更新,然后在幕后更新整个文档。 (写此评论时,最新的 Solr 是 v6.1.0)
    【解决方案3】:

    您可以开发一个最小的 Solr 插件,它将在 solr 服务器端为您完成工作。
    看一下: Discussion on Solr mailing list

    【讨论】:

      【解决方案4】:

      正如 javanna 回答的那样,没有任何工具可以通过查询进行更新,因为 Solr 也不允许您更新存储在索引中的文档中的各个字段,因此重新提交是唯一的更新方法。不过我很好奇为什么你的更新这么慢。以下是一些可以提高更新速度的方法。

      • 如果您在更新每个单独的文档后发布提交,则等待并仅在您更新索引中的一批文档后发布更新。来自Solr Tutorial

        提交可能是一项昂贵的操作,因此最好进行许多更改 批量到一个索引,然后在最后发送提交命令。 还有一个优化命令与提交做同样的事情, 除了将所有索引段合并为一个段之外, 使搜索速度更快,并导致任何已删除的文档 删除。

      • 考虑使用软提交或自动软提交来减少更新延迟。有关详细信息,请参阅 Solr Wiki 上的 NearRealtimeSearch 页面。

      【讨论】:

      • 我认为更新过程很慢只是因为许多 http 请求...好建议!
      【解决方案5】:

      我会将 DIH 与修改后的 SQL 查询一起使用,该查询将接受来自 URL 的参数。 SQL 查询将如下所示:

      SELECT user_name, user_online FROM users WHERE user_id=${dataimporter.request.user_id}
      

      然后要重新索引选定的用户,您将 user_id 参数添加到 URL,如下所示:

      http://<host>:<port>/solr/dataimport?command=full-import&clean=false&user_id=5
      

      有关使用 DIH 和自定义参数的文档:Solr - DataImportHandler

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        相关资源
        最近更新 更多