X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=e77e5fbe744a1c1cf4a1b6f68ed4a452f26fc257;hb=c5bc0f71fe718b3c66d86b48b1b8669278e94c18;hp=cafa7aa8ae60b66411b83f1e822ca749e5f90f04;hpb=cef013b96c9508d5fd8552e7fd05962029b37e6f;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index cafa7aa..e77e5fb 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.62 2004-09-15 08:13:51 adam Exp $ +/* $Id: zsets.c,v 1.65 2004-10-21 12:43:09 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -89,7 +89,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, 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 = @@ -206,6 +206,8 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) 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); } @@ -256,6 +258,8 @@ ZebraSet resultSetGet (ZebraHandle zh, const char *name) { 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); @@ -403,7 +407,7 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, while (num_i < num && positions[num_i] < position) num_i++; rfd = rset_open (rset, RSETF_READ); - while (num_i < num && rset_read (rfd, &key)) + while (num_i < num && rset_read (rfd, &key, 0)) { zint this_sys = key.mem[0]; if (this_sys != psysno) @@ -621,6 +625,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, 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 */ @@ -686,7 +691,8 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, } } rfd = rset_open (rset, RSETF_READ); - while (rset_read (rfd, &key)) + while (rset_read (rfd, &key,&termid)) + /* FIXME - pass a TERMID *, and use it for something below !! */ { zint this_sys = key.mem[0]; if (this_sys != psysno) @@ -726,7 +732,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) zint kno = 0; struct it_key key; RSFD rfd; - /* int term_index; */ + TERMID termid; int i; ZebraRankClass rank_class; struct rank_control *rc; @@ -750,7 +756,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) } rc = rank_class->control; - if (rset_read (rfd, &key)) + if (rset_read (rfd, &key, &termid)) { zint psysno = key.mem[0]; int score; @@ -776,30 +782,29 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) /* term lists! */ /* (*rc->add) (handle, this_sys, term_index); */ - 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) && (est<0) ); - + 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);