X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=9726903cc40c11bcb28a519ab8c1c45a226dc7cf;hb=e63cb633d580e1a364de81d4f24fb2c9fa70e279;hp=fd89662a0d0834288eaba899c247cdeaaffe3e10;hpb=2cb08a89ee65d8ae2646b91dcf27bc3883759691;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index fd89662..9726903 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.83 2005-05-24 11:35:42 adam Exp $ +/* $Id: zsets.c,v 1.85 2005-05-31 13:01:37 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -780,10 +780,11 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, } } rfd = rset_open (rset, RSETF_READ); - /* FIXME - pass a TERMID *, and use it for something below !! */ while (rset_read (rfd, &key, &termid)) { zint this_sys = key.mem[0]; + if (log_level_searchhits) + key_logdump_txt(log_level_searchhits, &key, termid->name); kno++; if (this_sys != psysno) { @@ -857,7 +858,8 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, zint this_sys = key.mem[0]; zint seqno = key.mem[key.len-1]; kno++; - key_logdump_txt(log_level_searchhits, &key, " Got hit"); + if (log_level_searchhits) + key_logdump_txt(log_level_searchhits, &key, termid->name); if (this_sys != psysno) { if (rfd->counted_items >= rset->hits_limit) @@ -1030,3 +1032,54 @@ ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname, } return ZEBRA_FAIL; } + +ZEBRA_RES zebra_get_hit_vector(ZebraHandle zh, const char *setname, + zint sysno) +{ + ZebraSet sset = resultSetGet(zh, setname); + yaz_log(YLOG_LOG, "zebra_get_hit_vector setname=%s zysno=" ZINT_FORMAT, + setname, sysno); + if (!sset) + return ZEBRA_FAIL; + else + { + struct rset_key_control *kc = zebra_key_control_create(zh); + NMEM nmem = nmem_create(); + struct it_key key; + RSET rsets[2], rset_comb; + RSET rset_temp = rstemp_create(nmem, kc, kc->scope, + res_get (zh->res, "setTmpDir"),0 ); + + TERMID termid; + RSFD rsfd = rset_open(rset_temp, RSETF_WRITE); + + key.mem[0] = sysno; + key.mem[1] = 0; + key.mem[2] = 0; + key.mem[3] = 0; + key.len = 2; + rset_write (rsfd, &key); + rset_close (rsfd); + + rsets[0] = rset_temp; + rsets[1] = rset_dup(sset->rset); + + rset_comb = rsmulti_and_create(nmem, kc, kc->scope, 2, rsets); + + rsfd = rset_open(rset_comb, RSETF_READ); + + while (rset_read(rsfd, &key, &termid)) + { + if (termid) + { + key_logdump_txt(YLOG_LOG, &key, termid->name); + yaz_log(YLOG_LOG, " type=%d", termid->type); + } + } + rset_close(rsfd); + + rset_delete(rset_comb); + } + return ZEBRA_OK; +} +