Solr即使在删除重复项后也返回不正确的方面计数

Solr即使在删除重复项后也返回不正确的方面计数,solr,duplicates,facet,Solr,Duplicates,Facet,我在一个3节点集群(solrcloud)上使用solr 4.10设置,带有zookeeper和RF=1。总共3个碎片 这里的问题是2阶段。 1.我在索引中添加了5000万条记录,索引中有一个uuid字段(user\u id)作为唯一键。uuid字段由应用程序生成,而不是由solr生成。记录以5k为一批编制索引并提交。索引之后,我看到索引中有很多重复项。即使uuid被指定为唯一密钥不知何故,两个不同的碎片具有相同的文档。 当我尝试返回特定查询的计数时,碎片返回了包括重复项在内的计数。它返回numF

我在一个3节点集群(solrcloud)上使用solr 4.10设置,带有zookeeper和RF=1。总共3个碎片

这里的问题是2阶段。 1.我在索引中添加了5000万条记录,索引中有一个uuid字段(user\u id)作为唯一键。uuid字段由应用程序生成,而不是由solr生成。记录以5k为一批编制索引并提交。索引之后,我看到索引中有很多重复项。即使uuid被指定为唯一密钥不知何故,两个不同的碎片具有相同的文档。

当我尝试返回特定查询的计数时,碎片返回了包括重复项在内的计数。它返回numFound=60686。 但是当我试图检索所有60686条记录时,它只返回了52760条,这是预期的实际记录

  • 看起来有7926个副本,但我检查时只有74个副本
  • 选择?q=tag%3A123&rows=0&wt=json&indent=true&facet=true&facet.field=user\u id&facet.mincount=2

    我手动删除了重复项,计数下降到60538,这仍然是错误的。 当我打开debugQuery时,我看到每个碎片都导致了这个错误计数

    是否有刻面缓存或需要清除的内容?剩下的额外数量是多少?我的应用程序依赖于计数,所以这是我面临的一个大问题


    提前谢谢

    如果您删除或更新了任何记录,它们仍然会对方面计数产生影响,直到Solr执行自动合并或手动优化触发器(非常昂贵)

    这是Lucene实际上不允许在适当的位置删除文档的代价,因此它在更高的级别上被标记为gone。这些文件从未出现在搜索中,但它们确实有助于计数


    所以,如果这是一个测试系统,尝试优化调用,看看您的问题是否消失。但这可能不是生产的解决方案,只是确认假设的一种方法。

    问题似乎出在文档路由器上。默认情况下,solr使用“隐式”路由器,我将其更改为“compositeId”,文档始终发送到同一个碎片


    参考:

    感谢Alexandre的回复。我做了一次优化,发现了同样的行为。所以我尝试索引更多的文档,直到我再次看到重复的文档。我发现在两个不同的碎片上有两个文档具有相同的唯一密钥,但它们有不同的版本。因此,如果solr能够将具有相同唯一密钥的文档路由到多个碎片,那么问题在于文档路由器。读过之后,我想我应该设置一个合适的router.name并将router.field指向我的唯一密钥字段。是否有关于在何处设置集合的这些字段的指针?请参阅官方文档。