3

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

要索引的文档的数据来自 Oracle 数据库。由于我必须处理大量 CLOB,因此我将数据导入拆分为多个 requestHandler 以提高性能,同时从数据库中获取数据(多线程模拟)。这些 requestHandlers 在我的 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 管理界面查询时可以找到的数字相同。

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

我正在使用 17 个 requestHandler,我的 <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>

非常感谢帮助。非常感谢您!

4

1 回答 1

2

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

于 2011-12-16T12:22:54.263 回答