Fixes for hit estimates. Added zebra_set_approx_limit.
[idzebra-moved-to-github.git] / index / zebraapi.c
index 7c4fccd..d536064 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.170 2005-05-30 13:27:08 adam Exp $
+/* $Id: zebraapi.c,v 1.175 2005-06-09 10:39:53 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -115,6 +115,7 @@ ZebraHandle zebra_open (ZebraService zs)
     zh->num_basenames = 0;
     zh->basenames = 0;
 
+    zh->approx_limit = 1000000000;
     zh->trans_no = 0;
     zh->trans_w_no = 0;
 
@@ -154,8 +155,6 @@ ZebraHandle zebra_open (ZebraService zs)
     return zh;
 }
 
-       const char *passwd_plain = 0;
-       const char *passwd_encrypt = 0;
 ZebraService zebra_start (const char *configName)
 {
     return zebra_start_res(configName, 0, 0);
@@ -171,11 +170,13 @@ ZebraService zebra_start_res (const char *configName, Res def_res, Res over_res)
         log_level_initialized = 1;
     }
 
-    yaz_log(log_level, "zebra_start %s",configName);
+    yaz_log(YLOG_LOG, "zebra_start %s %s",configName, ZEBRAVER);
     assert(configName);
 
     if ((res = res_open (configName, def_res, over_res)))
     {
+       const char *passwd_plain = 0;
+       const char *passwd_encrypt = 0;
         ZebraService zh = xmalloc(sizeof(*zh));
 
        yaz_log (YLOG_DEBUG, "Read resources `%s'", configName);
@@ -864,6 +865,12 @@ ZEBRA_RES zebra_select_databases (ZebraHandle zh, int num_bases,
     return ZEBRA_OK;
 }
 
+ZEBRA_RES zebra_set_approx_limit(ZebraHandle zh, zint approx_limit)
+{
+    zh->approx_limit = approx_limit;
+    return ZEBRA_OK;
+}
+
 ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query,
                           const char *setname, zint *hits)
 {
@@ -944,11 +951,18 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
            {
                char *buf;
                int len;
+               zebra_snippets *hit_snippet = zebra_snippets_create();
+
+               zebra_snippets_hit_vector(zh, setname, poset[i].sysno, 
+                                         hit_snippet);
+
                recs[i].errCode =
                    zebra_record_fetch(zh, poset[i].sysno, poset[i].score,
+                                      hit_snippet,
                                       stream, input_format, comp,
                                       &recs[i].format, &buf, &len,
                                       &recs[i].base, &recs[i].errString);
+               
                recs[i].len = len;
                if (len > 0)
                {
@@ -959,6 +973,7 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
                    recs[i].buf = buf;
                 recs[i].score = poset[i].score;
                 recs[i].sysno = poset[i].sysno;
+               zebra_snippets_destroy(hit_snippet);
            }
            else
            {
@@ -999,11 +1014,11 @@ ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
     return res;
 }
 
-ZEBRA_RES zebra_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
-                     oid_value attributeset,
-                     int *position,
-                     int *num_entries, ZebraScanEntry **entries,
-                     int *is_partial)
+ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
+                    oid_value attributeset,
+                    int *position,
+                    int *num_entries, ZebraScanEntry **entries,
+                    int *is_partial)
 {
     ZEBRA_RES res;
     ASSERTZH;
@@ -1298,20 +1313,20 @@ static int delete_SU_handle(void *handle, int ord)
     return 0;
 }
 
-ZEBRA_RES zebra_drop_database  (ZebraHandle zh, const char *database)
+ZEBRA_RES zebra_drop_database(ZebraHandle zh, const char *db)
 {
     ZEBRA_RES ret = ZEBRA_OK;
     ASSERTZH;
-    yaz_log(log_level, "zebra_drop_database");
+    yaz_log(log_level, "zebra_drop_database %s", db);
     zebra_clearError(zh);
 
-    if (zebra_select_database (zh, database) == ZEBRA_FAIL)
+    if (zebra_select_database (zh, db) == ZEBRA_FAIL)
         return ZEBRA_FAIL;
     if (zebra_begin_trans (zh, 1) == ZEBRA_FAIL)
         return ZEBRA_FAIL;
     if (zh->reg->isamb)
     {
-       zebraExplain_curDatabase (zh->reg->zei, database);
+       zebraExplain_curDatabase (zh->reg->zei, db);
        
        zebraExplain_trav_ord(zh->reg->zei, zh, delete_SU_handle);
        zebraExplain_removeDatabase(zh->reg->zei, zh);
@@ -1325,24 +1340,24 @@ ZEBRA_RES zebra_drop_database  (ZebraHandle zh, const char *database)
     return ret;
 }
 
-ZEBRA_RES zebra_create_database (ZebraHandle zh, const char *database)
+ZEBRA_RES zebra_create_database (ZebraHandle zh, const char *db)
 {
     ASSERTZH;
-    yaz_log(log_level, "zebra_create_database %s", database);
-    assert(database);
+    yaz_log(log_level, "zebra_create_database %s", db);
+    assert(db);
     zebra_clearError(zh);
 
-    if (zebra_select_database (zh, database) == ZEBRA_FAIL)
+    if (zebra_select_database (zh, db) == ZEBRA_FAIL)
         return ZEBRA_FAIL;
     if (zebra_begin_trans (zh, 1))
         return ZEBRA_FAIL;
 
     /* announce database */
-    if (zebraExplain_newDatabase (zh->reg->zei, database, 0 
+    if (zebraExplain_newDatabase (zh->reg->zei, db, 0 
                                   /* explainDatabase */))
     {
         zebra_end_trans (zh);
-       zebra_setError(zh, YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED, database);
+       zebra_setError(zh, YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED, db);
        return ZEBRA_FAIL;
     }
     return zebra_end_trans (zh);
@@ -2137,9 +2152,9 @@ ZEBRA_RES zebra_delete_record (ZebraHandle zh,
 */
 
 ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
-                          const char *setname, zint *numhits)
+                          const char *setname, zint *hits)
 {
-    zint hits = 0;
+    zint lhits = 0;
     ZEBRA_RES res = ZEBRA_OK;
     Z_RPNQuery *query;
     ODR odr = odr_createmem(ODR_ENCODE);
@@ -2158,14 +2173,14 @@ ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
        res = ZEBRA_FAIL;
     }
     else
-        res = zebra_search_RPN(zh, odr, query, setname, &hits);
+        res = zebra_search_RPN(zh, odr, query, setname, &lhits);
     
     odr_destroy(odr);
 
-    yaz_log(log_level, "Hits: " ZINT_FORMAT, hits);
+    yaz_log(log_level, "Hits: " ZINT_FORMAT, lhits);
 
-    if (numhits)
-       *numhits = hits;
+    if (hits)
+       *hits = lhits;
 
     return res;
 }