简单的记录下,在利用implicit方式创建collection后,消息路由是通过router来设置shard控制的,如果同一个ID的消息分别发向solr的不同服务器,将导致问题。
查询的时候,如果查询的显示行数小于文档总数,solr的前台显示将不会排重,会导致重复计数的问题。
证据:
问题重现方法,是利用implicit方式创建索引后,分别向不同的solr节点发送10条数据,这10条数据的ID是固定的,然后通过solr前台做查询,查询的时候,rows分别设定为1,12,10进行查询,就会发现每次显示的文档总数是不对的。
行数为10显示结果
行数为12显示结果
行数为1显示结果
结论: 在implicit方式创建索引的情况下,solr的重复的ID数据不能覆盖(我后面测试过,不覆盖显示的时候随机显示一条,如果你每次查询都一样,那是因为你有缓存的原因。)。在做查询的时候,如果你要显示的行数小于文档总数,计数只是把各个shard查询到的数据简单相加,如果是要显示的行数和文档总数相同或大于它,那么查询出来的结果将是正确的,计数的时候会对一个ID只记录一次。