Почему Solr сопоставляет данные и подсчитывает несоответствие при использовании group.limit?

Я выполняю запрос SOLR, в котором я группирую заголовки и ограничиваю количество заголовков в группах. Проблема, с которой я сталкиваюсь, заключается в том, что я не получаю точного количества совпадений с пройденным лимитом.

e.g:

http://localhost:8080/solr/select?wt=json&indent=true&fl=publication,book_code,bookID,book_date,book_images&q=asset_type:Book+AND+AND+engineering:true&group=true&group.field=book_code&group.limit=3&rows=50000&group.sort=book_date+desc

Как преобразовать этот запрос, чтобы я мог получать 10000 записей за раз.

В настоящее время возвращаемый результат:

{"responseHeader"=>
  {"status"=>0,
   "QTime"=>195,
   "params"=>
    {"fl"=>"publication,book_code,BookID,book_date,book_images",
     "indent"=>"true",
     "q"=>"doc_type:Book AND engineering:true",
     "group.limit"=>"3",
     "group.field"=>"book_code",
     "group.sort"=>"book_date desc",
     "group"=>"true",
     "wt"=>"json",
     "rows"=>"50000"}},
 "grouped"=>
  {"book_code"=>
    {"matches"=>30216,
    "groups"=>
      [{"groupValue"=>"NYM",
        "doclist"=>
         {"numFound"=>2683,
          "start"=>0,
          "docs"=>
           [{"book_code"=>"NYM", .... } and so on 

Когда я пытаюсь получить количество сгруппированных книг, я получаю:

result["grouped"]["book_code"]["groups"].count #=> 276

Который не соответствует возвращенному результату совпадений.


person Santosh Mohanty    schedule 26.05.2017    source источник


Ответы (1)


matches — это общее количество документов, соответствующих вашему запросу. Значение ["groups"].count — это количество возвращаемых отдельных групп. т.е. 30216 возвращенных документов относятся к 276 различным группам.

person MatsLindh    schedule 26.05.2017
comment
Спасибо за ответ. Можно ли каким-либо образом перебрать ответ и не передавать жестко заданное значение rows=>50000. Я не могу найти общее количество записей, на которые я полагаюсь по количеству циклов. - person Santosh Mohanty; 27.05.2017
comment
Зацикливание ответа будет происходить так, как вы делаете это в Ruby; не уверен, что вы спрашиваете об общем количестве записей - оно у вас уже есть, и у вас есть количество групп (.count)? Количество строк будет иметь значение в зависимости от того, что вы пытаетесь сделать, но просто указать большое число (если вы хотите получить все результаты) достаточно. - person MatsLindh; 27.05.2017