【发布时间】:2015-01-23 05:09:02
【问题描述】:
我是一个完全的 solr 菜鸟,所以我可能在这里遗漏了重要信息。
Solr 版本:10.4.2 平台:Mac OS X
我正在尝试将大约 5000 个文档添加到空索引中。文档有 4 个字段:
- id(字符串、索引、存储)
- 标题(solr.TextField,已编入索引,未存储)
- 关键字(solr.TextField、多值、索引、未存储)
- 内容(solr.TextField,已编入索引,未存储)
我正在使用update/json 在紧密循环中以 100 个批次插入文档(为每个批次向 update/json 端点发出新的 HTTP 请求)。如果我添加,例如,每个请求之间有 100 毫秒的延迟,问题会变得更好。如果我延迟一整秒,它就会完全消失,但这显然慢得让人无法接受。
我通过为我的 HTTP 请求添加非常短的超时(1 秒)并实现一些重试逻辑来解决这个问题。它可以工作,但当然,当它重试时,我总是会遇到烦人的延迟。
我的流程经常挂起,等待 solr 在流程中的某个时间点做出响应。例如,如果我从一个新的核心开始并立即对其进行测试,则这些是我每次运行的结果:
- 挂第45批,solr admin显示3280个文档
- 挂第52批,solr admin显示3788个文档
- 第14批挂掉,solr admin显示3788个文档
- 第17批挂了,solr admin显示3788个文档
- 成功完成所有批次,solr admin 显示 4043 个文档
在任何这些运行期间,solr admin 中的日志均未显示任何输出。在失败或成功运行后的任何时候,我都可以查询索引并根据已添加的数据返回合理的结果。
update/json 请求处理程序是“隐式添加”的——它没有在我的 solrconfig.xml 中指定。
我尝试将我的锁定机制从原生切换到简单,而行为没有改变。
您能提供的任何帮助将不胜感激。我不知道从哪里开始。
附加信息:
1:它似乎永远挂起。 “挂起”是指 Solr 从不响应 HTTP 请求。如果我取消请求并再次发送,它通常会立即正常工作。我让它等待了大约 10 分钟的响应。
2:我的 solrconfig.xml 有这个:
<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
</updateHandler>
【问题讨论】:
标签: solr