在查询多个solr收集时,分页不起作用

时间:2017-11-22 13:32:21

标签: solr solr4 solrcloud solr-query-syntax

我有两个集合mdsearch_veevavault和mdsearch_hema

http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q= %3A &安培; FL = ID,DESC1&安培;重量= JSON&安培;缩进=真安培;采集= mdsearch_veevavault,mdsearch_hema&安培;排序= titlesort%20desc,%20id%20asc < / p>

当我在没有给出开始和它返回的行数的情况下查询时:

{
  "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&安培;重量= JSON&安培;缩进=真安培;采集= mdsearch_veevavault,mdsearch_hema&安培;排序= titlesort%20desc,%20id%20asc&安培;行数= 25安培;起始= 300

- &GT;现在我将添加开始和行数条件start = 300和rows = 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 个答案:

答案 0 :(得分:1)

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

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

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

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