代码之家  ›  专栏  ›  技术社区  ›  Bhuvan

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

  •  0
  • Bhuvan  · 技术社区  · 8 年前

    我有两个集合mdsearch\u veevavault和mdsearch\u hema

    http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q= %3A &fl=id,desc1&wt=json&缩进=真(&T);集合=mdsearch\u veevavault、mdsearch\u hema&排序=标题排序%20desc,%20id%20asc

    {
      "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&缩进=真(&T);集合=mdsearch\u veevavault、mdsearch\u hema&排序=标题排序%20desc,%20id%20asc&行=25&开始=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将保持不变,每次我改变开始参数时,我都会看到这种变化

    1 回复  |  直到 8 年前
        1
  •  1
  •   MatsLindh    8 年前

    我猜想这是由于两个集合中的记录的ID重复造成的。当Solr将它们合并到单个结果时,id应该是唯一的,因为Solr知道文档是不同的。

    发生这种情况的原因是Solr仅从每个碎片/副本返回足够的文档,以满足请求的开始+行数,因此对于第一个请求,每个服务器返回10个文档,以及与查询匹配的文档总数。然后,这些计数与文档列表一起合并到响应请求的服务器上。

    在这种情况下,Solr不知道在剩下的一组文档中,有n个重叠的ID。但是,当您实际对结果集进行了足够多的分页时,Solr将查看从碎片返回的所有结果集中的ID,并查看是否存在重复的ID,然后从总计数中删除这些ID。

    您可以通过为每个id(即。 collectionname_idvalue 作为中的实际值 id ),除非您对合并这些结果感到满意。