Solr索引按查询更新

时间:2012-02-08 11:54:50

标签: solr

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

5 个答案:

答案 0 :(得分:10)

不,遗憾的是,没有像查询更新这样的功能。它将非常有用,就像一个新功能,可以更新文档而无需完全重新提交;那是一个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>

答案 1 :(得分:7)

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

答案 2 :(得分:1)

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

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

      

    提交可能是一项昂贵的操作,因此最好进行许多更改   批处理中的索引,然后在结束时发送提交命令。   还有一个优化命令可以执行与提交相同的操作,   除了将所有索引段合并为单个段之外,   使搜索速度更快,并导致任何已删除的文档   除去。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我会将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