我有以下情况。从SQL数据库读取'x'记录的批处理过程(其中X是数千个记录的数量级),将它们转换为SOLR文档,索引并提交给SOLR。所以...
1)从DB读取
2)变换
3)提交
此过程每天运行。几天后,SOLR进程总是达到可能的最大线程数(1024)。我对SOLR不太熟悉,但我觉得问题在于提交太多了。
我在考虑在'Y'转换之后提交(其中'Y'不足以导致内存问题)。这是最好的方法吗?有没有人以前遇到过这个问题?
PS:我正在使用SOLR 4.我使用Java作为客户端。
由于
答案 0 :(得分:1)
您需要在部署中更改solrconfig.xml:
<updateHandler class="solr.DirectUpdateHandler2">
...
<!-- Perform a <commit/> automatically under certain conditions:
maxDocs - number of updates since last commit is greater than this
maxTime - oldest uncommited update (in ms) is this long ago
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>1000</maxTime>
</autoCommit>
-->
...
...
</updateHandler>
<autoCommit>
元素被注释掉了。取消注释并为maxDocs和maxTime设置适当的值。
基本上它说:
在设定的时间或文档数量之后,commit命令将自动发出。
您只能指定2个标准中的1个:
<autoCommit>
<maxTime>60000</maxTime>
</autoCommit>
如果您希望在提交后重新打开搜索,那么您可能还需要这样:
<autoCommit>
<maxTime>60000</maxTime>
<openSearcher>true</openSearcher>
</autoCommit>