Funcion zebra_recid_to_sysno only attemps mapping if segment
[idzebra-moved-to-github.git] / index / zsets.c
index 19fb36a..8e48132 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zsets.c,v 1.127 2007-12-01 21:34:10 adam Exp $
+/* $Id: zsets.c,v 1.130 2007-12-19 14:11:36 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -1307,7 +1307,7 @@ static ZEBRA_RES zebra_recid_to_sysno(ZebraHandle zh,
     int sysnos_offset = 0;
     int i;
     
-    if (!zh->reg->isamb)
+    if (!zh->reg->isamb || !zh->m_segment_indexing)
     {
         if (sysnos_offset < *no_sysnos)
             *sysnos = recid;
@@ -1370,8 +1370,6 @@ static ZEBRA_RES zebra_recid_to_sysno(ZebraHandle zh,
                                         sysnos[sysnos_offset] = 
                                             key_found.mem[key_found.len-1];
                                 
-                                    yaz_log(YLOG_LOG,  "Found " ZINT_FORMAT, 
-                                            key_found.mem[key_found.len-1]);
                                     r = isamb_pp_read(pt, &key_found);
                                     sysnos_offset++;
                                 }
@@ -1403,6 +1401,32 @@ ZEBRA_RES zebra_result_recid_to_sysno(ZebraHandle zh,
     return zebra_recid_to_sysno(zh, basenames, num_bases,
                                 recid, sysnos, no_sysnos);
 }
+
+void zebra_count_set(ZebraHandle zh, RSET rset, zint *count,
+                     zint approx_limit)
+{
+    zint psysno = 0;
+    struct it_key key;
+    RSFD rfd;
+
+    yaz_log(YLOG_DEBUG, "count_set");
+
+    rset->hits_limit = approx_limit;
+
+    *count = 0;
+    rfd = rset_open(rset, RSETF_READ);
+    while (rset_read(rfd, &key,0 /* never mind terms */))
+    {
+        if (key.mem[0] != psysno)
+        {
+            psysno = key.mem[0];
+           if (rfd->counted_items >= rset->hits_limit)
+               break;
+        }
+    }
+    rset_close(rfd);
+    *count = rset->hits_count;
+}
                    
 
 /*