构建我的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和我的&lt; indexDefaults&gt;配置如下:
<useCompoundFile>false</useCompoundFile>
<mergeFactor>17</mergeFactor>
<ramBufferSizeMB>32</ramBufferSizeMB>
<maxBufferedDocs>50000</maxBufferedDocs>
<maxFieldLength>2000000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
<lockType>native</lockType>
非常感谢帮助。非常感谢你提前!
答案 0 :(得分:2)
我发现了问题,只需要RTFM ...... 我欺骗自己,因为默认的清洁选项是TRUE,我认为这是假的。 所以我只是使用&amp; clean = true调用第一个URL,而不是使用&amp; clean = false调用所有其他URL。因此,每个URL调用都会导致清理整个索引。如果我使用&amp; clean = false调用URL,则所有文档的总和都是正确的。