X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=4094d725db85caf77956fb135a2abe6b39e74f47;hb=0b916c43a55c3d66e938fa5f19b51a230c448777;hp=024113edd168203a446ce5a22406813aa188784a;hpb=810bce66201f40acfd7e8577d3997e6ea385f1cf;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index 024113e..4094d72 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.89 2005-06-09 10:39:53 adam Exp $ +/* $Id: zsets.c,v 1.92 2005-08-18 19:20:38 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -398,6 +398,10 @@ ZebraMetaRecord *zebra_meta_records_create(ZebraHandle zh, const char *name, RSET rset; int i; struct zset_sort_info *sort_info; + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; if (!log_level_set) loglevels(); @@ -483,7 +487,7 @@ ZebraMetaRecord *zebra_meta_records_create(ZebraHandle zh, const char *name, } while (num_i < num && rset_read (rfd, &key, 0)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; if (this_sys != psysno) { psysno = this_sys; @@ -711,6 +715,11 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, TERMID termid; TERMID *terms; int numTerms = 0; + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; + assert(nmem); /* compiler shut up about unused param */ sset->sort_info->num_entries = 0; @@ -785,7 +794,7 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, rfd = rset_open (rset, RSETF_READ); while (rset_read (rfd, &key, &termid)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; if (log_level_searchhits) key_logdump_txt(log_level_searchhits, &key, termid->name); kno++; @@ -829,6 +838,10 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, ZebraRankClass rank_class; struct zset_sort_info *sort_info; const char *rank_handler_name = res_get_def(zh->res, "rank", "rank-1"); + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; if (!log_level_set) loglevels(); @@ -839,6 +852,7 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, terms = (TERMID *) nmem_malloc(nmem, sizeof(*terms)*n); rset_getterms(rset, terms, n, &numTerms); + rank_class = zebraRankLookup(zh, rank_handler_name); if (!rank_class) { @@ -859,14 +873,14 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, zint psysno = 0; while (rset_read(rfd, &key, &termid)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; zint seqno = key.mem[key.len-1]; kno++; if (log_level_searchhits) key_logdump_txt(log_level_searchhits, &key, termid->name); if (this_sys != psysno) { - if (rfd->counted_items >= rset->hits_limit) + if (rfd->counted_items > rset->hits_limit) break; if (psysno) { @@ -960,8 +974,9 @@ static int trav_rset_for_termids(RSET rset, TERMID *termid_array, if (approx_array) approx_array[no] = rset->hits_approx; #if 0 - yaz_log(YLOG_LOG, "rset=%p term=%s count=" ZINT_FORMAT, - rset, rset->term->name, rset->hits_count); + yaz_log(YLOG_LOG, "rset=%p term=%s limit=" ZINT_FORMAT + " count=" ZINT_FORMAT, + rset, rset->term->name, rset->hits_limit, rset->hits_count); #endif no++; } @@ -983,7 +998,8 @@ ZEBRA_RES zebra_result_set_term_no(ZebraHandle zh, const char *setname, ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname, int no, zint *count, int *approx, - char *termbuf, size_t *termlen) + char *termbuf, size_t *termlen, + const char **term_ref_id) { ZebraSet sset = resultSetGet(zh, setname); if (sset) @@ -1029,6 +1045,8 @@ ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname, } termbuf[*termlen] = '\0'; } + if (term_ref_id) + *term_ref_id = term_array[no]->ref_id; xfree(term_array); xfree(hits_array);