Solr仍会在删除文档

时间:2018-04-10 10:32:24

标签: solr solrj facet solrcloud faceted-search

Solr在从旧的已删除或更新的文档进行分面时提供旧数据。

例如,我们正在对名称进行分区。我们的应用经常更改名称。当我们在更改名称后索引文档时,我们在搜索结果中获得旧名称和新名称。在深入研究之后,我知道Solr索引由段组成(一次写入),每个段包含一组文档。每当硬提交发生时,这些段将被关闭,即使文件被删除,它仍然会有那些文件(将被标记为已删除)。这些文件不会立即清除。它虽然不会显示在搜索结果中,但不知何故,faceting仍然能够访问这些数据。

优化解决了这个问题。但是,每次客户更改生产数据时,我们都无法执行此操作。我试过以下选项,这对我没用。

1)expungeDeletes。

在solrconfig.xml

中添加了以下这一行
<autoCommit>
  <maxTime>30000</maxTime>
  <openSearcher>false</openSearcher>
</autoCommit>

<!-- softAutoCommit is like autoCommit except it causes a
     'soft' commit which only ensures that changes are visible
     but does not ensure that data is synced to disk.  This is
     faster and more near-realtime friendly than a hard commit.
  -->

<autoSoftCommit>
  <maxTime>10000</maxTime>
</autoSoftCommit>

<commit waitSearcher="false" expungeDeletes="true"/>

2)使用TieredMergePolicyFactory可能无法帮助我,因为阈值可能无法始终达到,用户将在此期间看到旧数据。

3)另一种方法是调用每天在solrj中暴露一次的optimize()方法。但不确定这会对性能产生什么影响。

我们为每台服务器编制索引的文档数量最多为2M-3M。

请建议是否有任何解决方案。

如果需要更多数据,请告诉我。

0 个答案:

没有答案