使用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的设置?
答案 0 :(得分:0)
来自<autoCommit>
部分的Sample Solrconfix.xml文件。
在某些条件下自动执行硬提交。 而不是启用autoCommit,请考虑使用“commitWithin” 添加文件时
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`"