索引完成后DataImportHandler的作用是什么?

时间:2012-09-27 09:28:47

标签: solr lucene

我使用solr来索引大约40m的项目,最终的索引文件大约是20G。以下是增量导入后的消息:

<lst name="statusMessages">
<str name="Time Elapsed">0:51:44.149</str>
<str name="Total Requests made to DataSource">1</str>
<str name="Total Rows Fetched">5634016</str>
<str name="Total Documents Skipped">0</str>
<str name="Full Dump Started">2012-09-27 01:25:17</str>
<str name="">
Indexing completed. Added/Updated: 5634016 documents. Deleted 0 documents.
</str>

我想知道solr在做这个状态是什么?并且消息 replication?command = details return是:

<lst name="masterDetails">
<str name="indexSize">36.69 GB</str>

该指数几乎翻了一番,而且仍然会更大。这让我非常困惑。我正在进行delta导入,为什么在替换时索引会是双倍大小?

2 个答案:

答案 0 :(得分:0)

如果要更换大部分正常的文档。 lucene中的更新包括删除和重新插入文档,因为索引段是一次写入的。当您删除文档时,您实际上并没有删除它,只是将其标记为已删除,因为这些段是一次写入。

当下一次合并发生时,当您从小部分创建新的更大的细分时,已删除的文档将被删除。那时你应该看到索引大小的减少。这意味着您的索引大小不仅应该增加。根据使用的合并策略,合并或多或少发生。如果要手动强制合并,可以使用forceMerge操作,该操作是优化的新名称。根据使用的solr版本,您需要使用第一个或第二个。要小心,因为如果你有很多文件,forceMerge需要一段时间。也请查看this文章。

答案 1 :(得分:0)

在Solr 3.6之前,dataImportHandler默认设置optimize = true:

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

无论其他设置如何,都会触发将所有段合并为一个段。我想你可以通过在debug.jsp中添加一个优化复选框来解决这个问题,尽管我还没有尝试过。