当我使用CURL时,Autocommit / Softcommit不起作用

时间:2013-08-07 14:33:32

标签: solr

使用autocommit和softcommit功能时出现问题。

我使用curl语法来更新我的数据:

curl $url/solr/update/csv -F "stream.file=$folder/$file" -F  "commit=false" -F "header=false" -F "fieldnames=`cat $header`"

我在solrconfig.xml中设置了autocommit:

<autoCommit> 
  <maxTime>10000</maxTime> 
  <openSearcher>false</openSearcher> 
</autoCommit>

我已经索引了一系列文档,并且在索引结束时(索引需要几分钟)在我的solr管理员中看不到任何文档...当我重新加载或者我做一个明确的提交时,那么我的所有文档文件是可见的。

我知道如果我在“commit = true”中更改“commit = false”,我的所有文档都将被编入索引。但我知道在每次更新后进行提交都不是一个好的行为。

我是否会错过AutoCommit和SoftCommit的设置?

1 个答案:

答案 0 :(得分:0)

来自<autoCommit>部分的Sample Solrconfix.xml文件。

  

在某些条件下自动执行硬提交。            而不是启用autoCommit,请考虑使用“commitWithin”            添加文件时

来自CommitWithin Wiki Page

  

CommitWithin是Solr 1.4中引入的提交策略,它允许客户端要求Solr确保在一定时间内提交此<add>。这样就可以控制何时对Solr本身进行提交,将提交次数优化到最小,同时仍满足更新延迟要求。如果我说<add commitWithin=10000>(在XMLUpdateRequestHandler更新中),则告诉Solr确保文档在10000ms内提交,即10s。然后我可以继续在这10秒内添加其他文档(可能还有其他commitWithin值),当缓冲区中最旧的文件到期时,Solr会自动执行<commit>

我在过去一年或几年的几乎所有索引更新中都使用了commitWithin,并且看到比solrconfig.xml中的<autoCommit>设置好得多的结果。您可以在创建curl请求时指定此参数,方法是将"commit=false"更改为"comitWithin=10000",如下所示:

 curl $url/solr/update/csv -F "stream.file=$folder/$file" -F  "commitWithin=10000" -F "header=false" -F "fieldnames=`cat $header`"