首页 文章

Solr core的numDocs不等于已处理文档的总和

提问于
浏览
3

构建我的Solr索引时遇到问题(Apache Tomcat 6.0.33上的Lucene&Solr 3.4.0) .

要索引的文档的数据来自Oracle数据库 . 由于我必须处理大量CLOB,因此我将dataimport拆分为多个requestHandler,以便在从数据库中获取数据时提高性能(多线程模拟) . 这些requestHandler在我的solrconfig.xml中配置如下:

<requestHandler name="/segment-#" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">segment-#.xml</str>
    </lst>
</requestHandler>

要构建索引,我使用clean = true选项启动第一个DataImportHandler,然后启动所有其他段的完全导入 . 当所有段都通过时,状态页(http://host/solr/segment-#)告诉我,对于每个段,获取并处理了正确的行数(根据数据库中的SELECT COUNT(*)语句) . 好到目前为止 .

但是,如果我现在调用核心的状态页面(http://host/solr/admin/core),则numDocs不是所有段的总和 . 总有一些文件丢失 . 我尝试了几次索引构建,差异总是在变化 . 总之,索引中应该有830万个文档,但实际上总共有大约100,000个条目缺失 . numDocs与通过Solr管理界面使用 *:* 查询找到的数字相同 .

我打开了infostream,查看了日志条目,还看了Tomcat日志,但没有找到线索 . 我究竟做错了什么?

我使用17个requestHandlers,我的<indexDefaults>配置如下:

<useCompoundFile>false</useCompoundFile>
<mergeFactor>17</mergeFactor>
<ramBufferSizeMB>32</ramBufferSizeMB>
<maxBufferedDocs>50000</maxBufferedDocs>
<maxFieldLength>2000000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
<lockType>native</lockType>

非常感谢帮助 . 非常感谢你提前!

1 回答

  • 2

    我发现了问题,只需要RTFM ......我欺骗了自己,因为默认的清除选项是TRUE,我认为这是假的 . 所以我只使用&clean = true调用第一个URL,而不是使用&clean = false调用所有其他URL . 因此,每个URL调用都会导致清理整个索引 . 如果我使用&clean = false调用URL,则所有文档的总和都是正确的 .

相关问题