Avoid mixed stmt / var declare
[idzebra-moved-to-github.git] / index / zsets.c
index fd89662..b20041f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zsets.c,v 1.83 2005-05-24 11:35:42 adam Exp $
+/* $Id: zsets.c,v 1.88 2005-06-07 14:53:39 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,60 @@ ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname,
     }
     return ZEBRA_FAIL;
 }
+
+ZEBRA_RES zebra_snippets_hit_vector(ZebraHandle zh, const char *setname,
+                                   zint sysno, zebra_snippets *snippets)
+{
+    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)
+           {
+               struct ord_list *ol;
+               for (ol = termid->ol; ol; ol = ol->next)
+               {
+                   zebra_snippets_append(snippets, key.mem[key.len-1],
+                                         termid->reg_type,
+                                         ol->ord, termid->name);
+               }
+           }
+       }
+       rset_close(rsfd);
+       
+       rset_delete(rset_comb);
+       nmem_destroy(nmem);
+    }
+    return ZEBRA_OK;
+}
+