-/* $Id: zsets.c,v 1.63 2004-10-15 10:07:34 heikki Exp $
+/* $Id: zsets.c,v 1.69 2004-10-26 15:32:11 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
zebraSet->locked = 1;
zebraSet->rpn = 0;
zebraSet->nmem = m;
- zebraSet->rset_nmem=nmem_create(); /* FIXME - where to free this ?? */
+ zebraSet->rset_nmem=nmem_create();
zebraSet->num_bases = num_bases;
zebraSet->basenames =
return NULL;
if (s->rset)
rset_delete (s->rset);
+ if (s->rset_nmem)
+ nmem_destroy (s->rset_nmem);
if (s->nmem)
nmem_destroy (s->nmem);
}
{
NMEM nmem = nmem_create ();
yaz_log (LOG_LOG, "research %s", name);
+ if (!s->rset_nmem)
+ s->rset_nmem=nmem_create();
s->rset =
rpn_search (zh, nmem, s->rset_nmem, s->rpn, s->num_bases,
s->basenames, s->name, s);
struct sortKeyInfo sort_criteria[3];
int num_criteria;
RSFD rfd;
+ TERMID termid;
yaz_log (LOG_LOG, "resultSetSortSingle start");
assert(nmem); /* compiler shut up about unused param */
}
}
rfd = rset_open (rset, RSETF_READ);
- while (rset_read (rfd, &key,0))
+ while (rset_read (rfd, &key,&termid))
/* FIXME - pass a TERMID *, and use it for something below !! */
{
zint this_sys = key.mem[0];
return NULL;
}
-void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset)
+void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset, NMEM nmem)
{
zint kno = 0;
struct it_key key;
RSFD rfd;
- /* int term_index; */
- int i;
+ TERMID termid;
+ TERMID *terms;
+ int numterms;
+ int i,n;
ZebraRankClass rank_class;
struct rank_control *rc;
struct zset_sort_info *sort_info;
sort_info = zebraSet->sort_info;
sort_info->num_entries = 0;
zebraSet->hits = 0;
+ n=0;
+ rset_getterms(rset,0,0,&n);
+ terms=malloc( sizeof(*terms)*n);
+ numterms=0;
+ rset_getterms(rset,terms,n,&numterms);
+
rfd = rset_open (rset, RSETF_READ);
rank_class = zebraRankLookup (zh, rank_handler_name);
}
rc = rank_class->control;
- if (rset_read (rfd, &key, 0))
- /* FIXME - Pass a TERMID *, and use it for something ?? */
+ if (rset_read (rfd, &key, &termid))
{
zint psysno = key.mem[0];
int score;
void *handle =
- (*rc->begin) (zh->reg, rank_class->class_handle, rset);
+ (*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];
+ zint this_sys = key.mem[0]; /* FIXME - assumes scope==2 */
+ zint seqno = key.mem[1]; /* FIXME - assumes scope==2 */
kno++;
if (this_sys != psysno)
{
(zebraSet->hits)++;
psysno = this_sys;
}
- /* FIXME - Ranking is broken, since rsets no longer have */
- /* term lists! */
- /* (*rc->add) (handle, this_sys, term_index); */
+ (*rc->add) (handle, seqno, termid);
- if ( (est==-2) && (zebraSet->hits==esthits))
- { /* time to estimate the hits */
- rset_pos(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++;
+ if ( (est==-2) && (zebraSet->hits==esthits))
+ { /* time to estimate the hits */
+ rset_pos(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 (i--) est*=10;
- zebraSet->hits=est;
}
}
- }
- while (rset_read (rfd, &key,0) && (est<0) );
- /* FIXME - term ?? */
+ while (rset_read (rfd, &key,&termid) && (est<0) );
score = (*rc->calc) (handle, psysno);
resultSetInsertRank (zh, sort_info, psysno, score, 'A');
(*rc->end) (zh->reg, handle);
}
rset_close (rfd);
-/*
- for (i = 0; i < rset->no_rset_terms; i++)
+
+
+ for (i = 0; i < numterms; i++)
{
- if (est>0)
- rset->rset_terms[i]->count =
- est=(zint)(rset->rset_terms[i]->count/ratio);
- yaz_log (LOG_LOG, "term=\"%s\" nn=" ZINT_FORMAT
+ yaz_log (LOG_LOG, "term=\"%s\" "
" type=%s count=" ZINT_FORMAT,
- rset->rset_terms[i]->name,
- rset->rset_terms[i]->nn,
- rset->rset_terms[i]->flags,
- rset->rset_terms[i]->count);
+ terms[i]->name,
+ terms[i]->flags,
+ rset_count(terms[i]->rset));
}
-*/
yaz_log (LOG_DEBUG, ZINT_FORMAT " keys, "ZINT_FORMAT" distinct sysnos",
kno, zebraSet->hits);
}