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