我需要经常更新solr中的大量文档。例如,为user_id = 5设置“online”= true,依此类推。但通过http处理程序索引的速度非常慢。 Solr支持通过查询删除文件,有没有办法通过查询进行更新?通过查询更新Solr索引
回答
不幸的是,没有任何功能像查询更新。这将是非常有用的,就像一个新功能,可以更新文档而无需重新提交;那里有一个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>
由于javanna回答,没有任何设施通过查询来更新,如Solr的也不允许你更新各个领域在存储在索引中的文档中,重新提交是唯一的更新方法。我很好奇,但为什么你的更新速度如此之慢。以下是一些可以提高更新速度的方法。
如果在更新每个单独的文档后发出提交,请等待并且只有在更新了索引中的一批文档后才发出更新。从Solr Tutorial:
提交可以是一个昂贵的操作,所以最好做在批处理许多变化 到一个索引,然后在最后发送commit命令。 除了将所有索引段合并为一个段, 还有一个优化命令,它与commit, 具有相同的功能,因此可以更快地搜索并删除所有已删除的文档,从而删除 。
查看使用软提交或自动软提交以减少更新延迟。有关更多详细信息,请参阅Solr Wiki上的NearRealtimeSearch页面。
我认为更新过程很慢,仅仅是因为很多http请求......好的建议! – javanna 2012-02-08 12:49:02
我会使用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
你可以开发一个最小的Solr插件,它将在solr服务器端为您完成工作。
看一看: Discussion on Solr mailing list
目前仍然通过查询没有更新,但是从2012年的答案是过时的。现在在Solr 4.x中有https://wiki.apache.org/solr/Atomic_Updates,所以你可以在两步中做你想做的事情,而不需要访问原始文档。
原子更新有限制。正如Erick在maillist中所说的那样,它仍然是场景后面的整个文档更新。使用原子更新时未列出的文档的字段必须“存储”,否则在原子更新后它们的原始值可能会丢失,因为我认为它从原始索引中检索这些未列出的字段的值,并将它们与列出的字段合并以进行原子更新,然后在整个场景后面更新整个文档。 (在撰写评论时,最新的Solr是v6.1.0) – 2016-06-29 09:57:49
- 1. 从Lucene索引更新Solr索引
- 2. 如何更新solr索引?
- 3. 如何通过curl查询删除SOLR索引数据?
- 4. Elastisearch通过查询更新
- 5. Solr索引过长
- 6. solr:索引过滤
- 7. 索引和查询Solr中的URL
- 8. 如何使用lucene.net查询solr索引
- 9. 如何通过Django查询Postgres索引
- 10. 未定义索引和更新查询
- 11. Solr部分文档索引更新
- 12. 强制Solr从更新索引读取
- 13. Indexeddb - 通过索引键更新记录
- 14. 如何复制每个过滤器查询的Solr索引?
- 15. 索引时查询Solr导致索引丢失文档
- 16. 了解索引视图更新QND查询过程2008 R2
- 17. 通过Solrj查询Solr:基础知识
- 18. 使用查询更新solr文档?
- 19. elasticsearch查询最新索引
- 20. 重新索引SOLR文档
- 21. Solr重新索引行为
- 22. 更新查询的SQL Server通过JOINS
- 23. 通过SQL查询更新列
- 24. PHP值没有通过更新查询
- 25. 使用组更新查询通过
- 26. 无法通过更新查询
- 27. 更新两行通过SQL查询
- 28. Solr搜索 - 使用查询
- 29. Solr的搜索查询
- 30. 通过更新索引模板更新Elasticsearch映射
关于这个话题还有一个很好阐述的jira问题,以及为什么它没有解决:https://issues.apache。org/jira/browse/SOLR-7490 – cheffe 2016-02-15 11:20:16