0

我有以下情况。一个批处理过程,它从 SQL 数据库中读取“x”条记录(其中 X 大约是数千条记录的 10 条),将它们转换为 SOLR 文档,索引并提交给 SOLR。所以 ...

1) 从数据库中读取
2) 转换
3) 提交

此过程每天运行。几天后,SOLR 进程总是达到可能的最大线程数 (1024)。我对 SOLR 不是很有经验,但我觉得问题在于提交太多。

我正在考虑在“Y”转换之后提交(其中“Y”不够大而不会导致内存问题)。这是最好的方法吗?有没有人遇到过这个问题?

PS:我使用 SOLR 4。我使用 Java 作为客户端。

谢谢

4

1 回答 1

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 设置适当的值。基本上它说:

提交命令将在设定的时间或文档数量后自动发出。

您只能指定 2 个条件中的 1 个:

<autoCommit>
    <maxTime>60000</maxTime>
</autoCommit>

如果您希望在提交后重新打开搜索,那么您可能还希望这样:

<autoCommit>
    <maxTime>60000</maxTime>
    <openSearcher>true</openSearcher>
</autoCommit>
于 2013-07-26T13:43:16.520 回答