Apache Solr - 这是处理提交的最佳方式

时间:2013-07-26 13:24:30

标签: java apache solr nosql

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

1)从DB读取 2)变换
3)提交

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

我在考虑在'Y'转换之后提交(其中'Y'不足以导致内存问题)。这是最好的方法吗?有没有人以前遇到过这个问题?

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

由于

1 个答案:

答案 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>