我在 3节点群集(solrcloud)上使用solr 4.10设置与zookeeper和 RF = 1。总共3个分片。
这里的问题是2阶段。 1.我将 5000万记录添加到索引中,该索引具有uuid字段( user_id )作为唯一键。 uuid字段由应用程序生成,而不是solr。这些记录分批编入索引并提交。索引之后,我看到索引中有很多重复项。即使uuid被指定为唯一键。 不知何故,2个不同的分片具有相同的文档。
当我试图返回特定查询的计数时,分片返回包括重复的计数。它返回 numFound = 60,686 。 但当我试图检索所有60,686条记录时,它只返回52,760 ,这是预期的实际记录。
选择Q =标签%3A123&安培;行= 0&安培;重量= JSON&安培;缩进=真安培;小面=真安培; facet.field = USER_ID&安培; facet.mincount = 2
我手动删除了重复项,计数下降到60538,这仍然是错误的。 当我打开debugQuery时,我看到每个分片都会导致这个错误计数。
是否有facet缓存或需要清除的东西?剩下的额外数量是多少?我的应用程序依赖于计数,所以这是我面临的一个大问题。
提前致谢。
答案 0 :(得分:2)
问题似乎与文档路由器有关。默认情况下,solr使用" implicit"路由器,我把它改成" compositeId"并且文档总是被发送到同一个碎片。
参考:https://lucidworks.com/blog/2013/06/13/solr-cloud-document-routing/
答案 1 :(得分:0)
如果您删除或更新了任何记录,他们仍然会对分面计数做出贡献,直到Solr自动合并或您手动优化触发(非常昂贵)。
这是Lucene实际上不允许删除文档的事实的代价,因此标记为更高级别。这些文件从未出现在搜索中,但它们确实有助于计算。
因此,如果这是一个测试系统,请尝试优化调用,看看您的问题是否消失。但这可能不是生产的解决方案,只是确认假设的一种方法。