+ (sset->hits)++;
+ psysno = this_sys;
+ resultSetInsertSort (zh, sset,
+ sort_criteria, num_criteria, psysno);
+ }
+ }
+ rset_close (rfd);
+ yaz_log(log_level_sorting, ZINT_FORMAT " keys, " ZINT_FORMAT " sysnos, sort",
+ kno, sset->hits);
+ for (i = 0; i < numTerms; i++)
+ yaz_log(log_level_sorting, "term=\"%s\" type=%s count=" ZINT_FORMAT,
+ terms[i]->name, terms[i]->flags, rset_count(terms[i]->rset));
+ *sort_status = Z_SortResponse_success;
+}
+
+RSET resultSetRef (ZebraHandle zh, const char *resultSetId)
+{
+ ZebraSet s;
+
+ if ((s = resultSetGet (zh, resultSetId)))
+ return s->rset;
+ return NULL;
+}
+
+void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset, NMEM nmem)
+{
+ zint kno = 0;
+ struct it_key key;
+ RSFD rfd;
+ TERMID termid;
+ TERMID *terms;
+ int numTerms = 0;
+ int n = 0;
+ int i;
+ ZebraRankClass rank_class;
+ struct rank_control *rc;
+ struct zset_sort_info *sort_info;
+ const char *rank_handler_name = res_get_def(zh->res, "rank", "rank-1");
+ double cur,tot;
+ zint est=-2; /* -2 not done, -1 can't do, >0 actual estimate*/
+ zint esthits;
+ double ratio;
+
+ if (!log_level_set)
+ loglevels();
+ sort_info = zebraSet->sort_info;
+ sort_info->num_entries = 0;
+ zebraSet->hits = 0;
+ rset_getterms(rset, 0, 0, &n);
+ terms = (TERMID *) nmem_malloc(nmem, sizeof(*terms)*n);
+ rset_getterms(rset, terms, n, &numTerms);
+
+ rfd = rset_open (rset, RSETF_READ);
+
+ rank_class = zebraRankLookup (zh, rank_handler_name);
+ if (!rank_class)
+ {
+ yaz_log(YLOG_WARN, "No such rank handler: %s", rank_handler_name);
+ return;
+ }
+ rc = rank_class->control;
+
+ if (rset_read (rfd, &key, &termid))
+ {
+ zint psysno = key.mem[0];
+ int score;
+ void *handle =
+ (*rc->begin) (zh->reg, rank_class->class_handle, rset, nmem,
+ terms, numTerms);
+ (zebraSet->hits)++;
+ esthits = atoi(res_get_def(zh->res, "estimatehits","0"));
+ if (!esthits)
+ est = -1; /* can not do */
+ do
+ {
+ zint this_sys = key.mem[0]; /* FIXME - assumes scope==2 */
+ zint seqno = key.mem[key.len-1]; /* FIXME - assumes scope==2 */
+ kno++;
+ key_logdump_txt(log_level_searchhits,&key," Got hit");
+ if (this_sys != psysno)