0

大型文档集(35K 文档)的 cfindex;将 useColdSearcher 设置为 true 以避免“超出 maxWarmingSearchers”错误是否有好处?从 CF Admin 运行索引重建将不会出现错误说明。对整个目录进行清除和更新时出错:超出 maxWarmingSearchers。我编写了一个例程来获取所有文件并单独添加它们,随着索引变大,动态增加延迟让 Solr 完成每个文档

<cfset delay=1000>
<cfdirectory action="list" directory="#dir#files" name="qFiles" >
<cfoutput query="qFiles">
    <cfindex action="update"
    collection="myColl"
    type="file"
    key="#dir#files\#qFiles.name#">
    <cfset sleep(1000+qFiles.currentRow)>
</cfoutput>

这主要是有效的,但在某些时候仍然会再次出现 maxWarmingSearchers 错误。我最终还不得不记录索引的文件并从添加的最后一个文件重新启动进程(以及计算以获得足够长的睡眠时间)。是否在 solrconfig.xml 帮助中临时将 useColdSearcher 设置为 true,是否有一些后门方法可以在 cfindex 标记中设置该属性,或者我必须手动设置它然后再将其设置回来?

4

1 回答 1

1

您可能想要更多地关注您的自动提交设置,以及调整更新本身的提交设置。除非您在 solr 配置中指定设置来“加热”缓存,否则使用冷缓存不会给您带来任何好处。

从评论:

<!-- Use Cold Searcher

     If a search request comes in and there is no current
     registered searcher, then immediately register the still
     warming searcher and use it.  If "false" then all requests
     will block until the first searcher is done warming.
  -->
<useColdSearcher>false</useColdSearcher>

听起来这对你没有帮助。您可以增加 maxWarmingSearchers,但很可能您需要更改提交的频率。

另外,请记住,只有软提交总是一个新的搜索者,硬提交不一定。从自动提交的评论中:

<!-- AutoCommit

     Perform a hard commit automatically under certain conditions.
     Instead of enabling autoCommit, consider using "commitWithin"
     when adding documents. 

     http://wiki.apache.org/solr/UpdateXmlMessages

     maxDocs - Maximum number of documents to add since the last
               commit before automatically triggering a new commit.

     maxTime - Maximum amount of time in ms that is allowed to pass
               since a document was added before automatically
               triggering a new commit. 
     openSearcher - if false, the commit causes recent index changes
       to be flushed to stable storage, but does not cause a new
       searcher to be opened to make those changes visible.

     If the updateLog is enabled, then it's highly recommended to
     have some sort of hard autoCommit to limit the log size.
  -->

在您的情况下,如果您使用 autoCommit 并在发出更新请求时使用 commitWithin 调整新搜索器的生成,我建议您将 openSearcher 设置为 false。

于 2013-09-19T02:34:53.207 回答