- int psysno = key.sysno;
- int score;
- void *handle =
- (*rc->begin) (zh, rank_class->class_handle, rset);
- (zebraSet->hits)++;
- do
- {
- kno++;
- if (key.sysno != psysno)
- {
- score = (*rc->calc) (handle, psysno);
-
- resultSetInsertRank (zh, sort_info, psysno, score, 'A');
- (zebraSet->hits)++;
- psysno = key.sysno;
- }
- (*rc->add) (handle, key.seqno, term_index);
- }
- while (rset_read (rset, rfd, &key, &term_index));
- score = (*rc->calc) (handle, psysno);
- resultSetInsertRank (zh, sort_info, psysno, score, 'A');
- (*rc->end) (zh, handle);
+#if IT_KEY_NEW
+ zint psysno = key.mem[0];
+#else
+ zint psysno = key.sysno;
+#endif
+ int score;
+ void *handle =
+ (*rc->begin) (zh->reg, rank_class->class_handle, rset);
+ (zebraSet->hits)++;
+ esthits=atoi(res_get_def(zh->res,"estimatehits","0"));
+ if (!esthits)
+ est=-1; /* can not do */
+ do
+ {
+#if IT_KEY_NEW
+ zint this_sys = key.mem[0];
+#else
+ zint this_sys = key.sysno;
+#endif
+ kno++;
+ if (this_sys != psysno)
+ {
+ score = (*rc->calc) (handle, psysno);
+
+ resultSetInsertRank (zh, sort_info, psysno, score, 'A');
+ (zebraSet->hits)++;
+ psysno = this_sys;
+ }
+ /* FIXME - Ranking is broken, since rsets no longer have */
+ /* term lists! */
+ /* (*rc->add) (handle, this_sys, term_index); */
+
+ if ( (est==-2) && (zebraSet->hits==esthits))
+ { /* time to estimate the hits */
+ rset_pos(rset,rfd,&cur,&tot);
+ if (tot>0) {
+ ratio=cur/tot;
+ est=(zint)(0.5+zebraSet->hits/ratio);
+ logf(LOG_LOG, "Estimating hits (%s) "
+ "%0.1f->"ZINT_FORMAT
+ "; %0.1f->"ZINT_FORMAT,
+ rset->control->desc,
+ cur, zebraSet->hits,
+ tot,est);
+ i=0; /* round to 3 significant digits */
+ while (est>1000) {
+ est/=10;
+ i++;
+ }
+ while (i--) est*=10;
+ zebraSet->hits=est;
+ }
+ }
+ }
+ while (rset_read (rset, rfd, &key) && (est<0) );
+
+ score = (*rc->calc) (handle, psysno);
+ resultSetInsertRank (zh, sort_info, psysno, score, 'A');
+ (*rc->end) (zh->reg, handle);