如何从Solr索引中删除逻辑删除的文档?

时间:2010-06-16 13:01:05

标签: lucene solr solrj

我正在实施Solr,对一个项目进行自由文本搜索,每天都需要大量添加和删除可用于搜索的记录。

由于规模我需要确保索引的大小合适。

在我的Solr测试安装中,我索引了一组10个文档。然后我在其中一个文档中进行了更改,并希望在索引中替换具有相同ID的文档。这可以正常工作,并在我搜索时按预期运行。

我正在使用此代码更新文档:

getSolrServer().deleteById(document.getIndexId());
getSolrServer().add(document.getSolrInputDocument());
getSolrServer().commit();

我注意到的是,当我查看Solr服务器的统计信息页面时,数据并不是我所期望的。

在初始索引之后,numDocs和maxDocs都等于预期的10。但是当我更新文档时,numDocs仍然等于10(预期)但maxDocs等于11(意外)。

阅读文档时,我看到了

  

maxDoc可能更大,因为maxDoc计数包括尚未从索引中删除的逻辑删除文档。

所以问题是,如何从索引中删除逻辑删除的文档?

如果索引中仍然存在这些文档,那么在使用大量文档运行时,是否存在性能损失的风险?

谢谢:)

1 个答案:

答案 0 :(得分:6)

你必须optimize your index

请注意,优化是广泛的,你可能不应该每天做更多。

以下是有关优化的更多信息:

http://www.lucidimagination.com/search/document/CDRG_ch06_6.3.1.3

http://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations