查询多个 solr 集合时分页不起作用

Pagination not working while querying multiple solr collecections

我有两个合集mdsearch_veevavault和mdsearch_hema

http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc

当我查询时没有给出开始和行数 returns:

{
  "responseHeader":{
    "status":0,
    "QTime":5,
    "params":{
      "q":"*:*",
      "indent":"true",
      "fl":"id,desc1",
      "collection":"mdsearch_veevavault,mdsearch_hema",
      "sort":"titlesort desc, id asc",
      "wt":"json"}},
  "response":{"numFound":6963,"start":0,"docs":[
      {

}
它给了我 6963 个结果,这是正确的

http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc&rows=25&start=300

-> 现在我将添加开始和行数条件开始 = 300 和行 = 25

{
  "responseHeader":{
    "status":0,
    "QTime":22,
    "params":{
      "q":"*:*",
      "indent":"true",
      "fl":"id,desc1",
      "start":"300",
      "collection":"mdsearch_veevavault,mdsearch_hema",
      "sort":"titlesort desc, id asc",
      "rows":"25",
      "wt":"json"}},
  "response":{"numFound":6960,"start":300,"docs":[
      {}

现在找到的记录数 减少了6960 , 任何人都可以帮助我了解造成这种情况的原因吗?, 我假设当我们改变开始参数时 numFound 将保持不变,每次我改变开始参数时我都会看到这种变化

我猜这是因为两个集合中记录的 ID 重复。当 Solr 将它们合并为一个结果时,id 应该是唯一的——因为这就是 Solr 知道文档不同的方式。

发生这种情况的原因是 Solr 只有 returns 每个 shard/replica 足够的文档来满足请求的 start+rows 文档数,因此对于第一个请求,返回 10 个文档每个服务器,以及与查询匹配的文档总数。然后将这些计数与文档列表一起合并到响应请求的服务器上。

在这种情况下,Solr 不会知道在剩余的文档集中,有 n 个重叠的 id。但是,当您实际上已经分页到结果集中足够远时,Solr 将查看从分片返回的所有结果集中的那些 ID,并查看是否存在重复的 ID - 然后将这些 ID 从总数中删除。

您可以通过为每个 id 引入一个特定于集合的参数来解决这个问题(即 collectionname_idvalue 作为 id 中的实际值),除非您对合并这些结果感到满意。