Fixes for hit estimates. Added zebra_set_approx_limit.
[idzebra-moved-to-github.git] / include / idzebra / api.h
index d2226b4..1b9dd22 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: api.h,v 1.18 2005-04-15 10:47:48 adam Exp $
+/* $Id: api.h,v 1.26 2005-06-09 10:39:52 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -24,9 +24,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
     \brief Zebra API
     
     Return codes:
     \brief Zebra API
     
     Return codes:
-    Most functions return an int. Unix-like, 0 means OK, 
-    non-zero means an error. The error info should be available
-    via zebra_errCode and friends. 
+    Most functions return ZEBRA_RES, where ZEBRA_FAIL indicates
+    failure; ZEBRA_OK indicates success.
 */
 
 #ifndef IDZEBRA_API_H
 */
 
 #ifndef IDZEBRA_API_H
@@ -49,7 +48,7 @@ typedef struct {
     long stime;
 } ZebraTransactionStatus;
 
     long stime;
 } ZebraTransactionStatus;
 
-/* Retrieval Record Descriptor */
+/** Retrieval Record Descriptor */
 typedef struct {
     int errCode;         /* non-zero if error when fetching this */
     char *errString;     /* error string */
 typedef struct {
     int errCode;         /* non-zero if error when fetching this */
     char *errString;     /* error string */
@@ -62,7 +61,7 @@ typedef struct {
     int  score;
 } ZebraRetrievalRecord;
 
     int  score;
 } ZebraRetrievalRecord;
 
-/* Scan Term Descriptor */
+/** Scan Term Descriptor */
 typedef struct {
     int occurrences;     /* scan term occurrences */
     char *term;          /* scan term string */
 typedef struct {
     int occurrences;     /* scan term occurrences */
     char *term;          /* scan term string */
@@ -84,10 +83,11 @@ typedef struct zebra_service *ZebraService;
     
     This function is a simplified version of zebra_start_res.
 */
     
     This function is a simplified version of zebra_start_res.
 */
-YAZ_EXPORT ZebraService zebra_start(const char *configName);
+YAZ_EXPORT
+ZebraService zebra_start(const char *configName);
 
 
-/** \fn ZebraService zebra_start_res(const char *configName,
-    Res def_res, Res over_res)
+/** \fn ZebraService zebra_start_res(const char *configName, \
+                                     Res def_res, Res over_res)
     \brief starts a Zebra service with resources.
     \param configName name of configuration file
     \param def_res default resources
     \brief starts a Zebra service with resources.
     \param configName name of configuration file
     \param def_res default resources
@@ -100,88 +100,105 @@ YAZ_EXPORT
 ZebraService zebra_start_res(const char *configName,
                             Res def_res, Res over_res);
 
 ZebraService zebra_start_res(const char *configName,
                             Res def_res, Res over_res);
 
-/** \fn ZEBRA_RES zebra_stop(ZebraService zs)
-    \brief stops a Zebra service.
-    \param zs service handle
-    
-    Frees resources used by the service.
+/**
+   \brief stops a Zebra service.
+   \param zs service handle
+   
+   Frees resources used by the service.
 */
 YAZ_EXPORT
 ZEBRA_RES zebra_stop(ZebraService zs);
 
 */
 YAZ_EXPORT
 ZEBRA_RES zebra_stop(ZebraService zs);
 
-/** \fn void zebra_filter_info(ZebraService zs, void *cd,
-    void(*cb)(void *cd, const char *name))
-    \brief lists enabled Zebra filters
-    \param zs service handle
-    \param cd callback parameter (opaque)
-    \param cb callback function
+/**
+   \brief Lists enabled Zebra filters
+   \param zs service handle
+   \param cd callback parameter (opaque)
+   \param cb callback function
  */
 YAZ_EXPORT
 void zebra_filter_info(ZebraService zs, void *cd,
                       void (*cb)(void *cd, const char *name));
 
 
  */
 YAZ_EXPORT
 void zebra_filter_info(ZebraService zs, void *cd,
                       void (*cb)(void *cd, const char *name));
 
 
-/** \fn ZebraHandle zebra_open(ZebraService zs)
-    \brief creates a Zebra session handle within service.
-    \param zs service handle.
-    
-    There should be one handle for each thread doing something
-    with zebra, be that searching or indexing. In simple apps 
-    one handle is sufficient 
+/**
+   \brief Creates a Zebra session handle within service.
+   \param zs service handle.
+   
+   There should be one handle for each thread doing something
+   with zebra, be that searching or indexing. In simple apps 
+   one handle is sufficient 
 */
 */
-YAZ_EXPORT ZebraHandle zebra_open(ZebraService zs);
+YAZ_EXPORT
+ZebraHandle zebra_open(ZebraService zs);
 
 
-/** \fn int zebra_close(ZebraHandle zh)
-    \brief destroys Zebra session handle.
-    \param zh zebra session handle.
+/**
+   \brief Destroys Zebra session handle.
+   \param zh zebra session handle.
  */
  */
-YAZ_EXPORT ZEBRA_RES zebra_close(ZebraHandle zh);
+YAZ_EXPORT
+ZEBRA_RES zebra_close(ZebraHandle zh);
 
 
-/** \fn int zebra_errCode(ZebraHandle zh)
-    \brief returns error code for last error
-    \param zh zebra session handle.
+/**
+   \brief Returns error code for last error
+   \param zh zebra session handle.
 */
 */
-YAZ_EXPORT int zebra_errCode(ZebraHandle zh);
+YAZ_EXPORT
+int zebra_errCode(ZebraHandle zh);
 
 
-/** \fn const char *zebra_errString(ZebraHandle zh)
-    \brief returns error string for last error
-    \param zh zebra session handle.
+/**
+   \brief Returns error string for last error
+   \param zh zebra session handle.
 */
 */
-YAZ_EXPORT const char *zebra_errString(ZebraHandle zh);
+YAZ_EXPORT
+const char *zebra_errString(ZebraHandle zh);
 
 
-/** \fn char *zebra_errAdd(ZebraHandle zh)
-    \brief returns additional info for last error
-    \param zh zebra session handle.
+/**
+   \brief Returns additional info for last error
+   \param zh zebra session handle.
 */
 */
-YAZ_EXPORT char *zebra_errAdd(ZebraHandle zh);
+YAZ_EXPORT
+char *zebra_errAdd(ZebraHandle zh);
 
 
-/** \fn int zebra_result(ZebraHandle zh, int *code, char **addinfo)
-    \brief returns error code and additional info for last error
-    \param zh zebra session handle.
-    \param code pointer to returned error code
-    \param addinfo pointer to returned additional info
+/**
+   \brief Returns error code and additional info for last error
+   \param zh zebra session handle.
+   \param code pointer to returned error code
+   \param addinfo pointer to returned additional info
 */
 */
-YAZ_EXPORT int zebra_result(ZebraHandle zh, int *code, char **addinfo);
+YAZ_EXPORT
+void zebra_result(ZebraHandle zh, int *code, char **addinfo);
 
 
-/** \fn void zebra_clearError(ZebraHandle zh)
-    \brief clears last error.
+/** 
+    \brief Clears last error.
     \param zh zebra session handle.
     \param zh zebra session handle.
- */
-YAZ_EXPORT void zebra_clearError(ZebraHandle zh);
+*/
+YAZ_EXPORT
+void zebra_clearError(ZebraHandle zh);
 
 
-/** \fn ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
-    const char *setname, int *hits)
-    \brief Search using PQF Query 
-    \param zh session handle
-    \param pqf_query query
-    \param setname name of resultset
-    \param hits of hits is returned
+
+/**
+   \brief Set limit before Zebra does approx hit count
+   \param zh session handle
+   \param approx_limit the limit
+   
+   Results will be approximiate if hit count is greater than the
+   limit specified. By default there is a high-limit (no limit).
+*/
+ZEBRA_RES zebra_set_approx_limit(ZebraHandle zh, zint approx_limit);
+
+/**
+   \brief Search using PQF Query 
+   \param zh session handle
+   \param pqf_query query
+   \param setname name of resultset
+   \param hits of hits is returned
  */
  */
-YAZ_EXPORT ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
-                                     const char *setname, zint *hits);
+YAZ_EXPORT
+ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
+                          const char *setname, zint *hits);
 
 
-/** \fn ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query,
-    const char *setname, zint *hits)
+/** \fn ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query, \
+               const char *setname, zint *hits)
     \brief Search using RPN Query 
     \param zh session handle
     \param o ODR handle
     \brief Search using RPN Query 
     \param zh session handle
     \param o ODR handle
@@ -189,14 +206,16 @@ YAZ_EXPORT ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
     \param setname name of resultset
     \param hits number of hits is returned
  */
     \param setname name of resultset
     \param hits number of hits is returned
  */
-YAZ_EXPORT ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query,
-                                     const char *setname, zint *hits);
+YAZ_EXPORT
+ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query,
+                             const char *setname, zint *hits);
 
 /** 
 
 /** 
-    \fn ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
-    const char *setname, Z_RecordComposition *comp, oid_value input_format,
-    int num_recs, ZebraRetrievalRecord *recs)
-    \brief retrieve records from result set (after search)
+    \fn ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream, \
+               const char *setname, Z_RecordComposition *comp, \
+               oid_value input_format, int num_recs, \
+               ZebraRetrievalRecord *recs)
+    \brief Retrieve records from result set (after search)
     \param zh session handle
     \param stream allocate records returned using this ODR
     \param setname name of result set to retrieve records from
     \param zh session handle
     \param stream allocate records returned using this ODR
     \param setname name of result set to retrieve records from
@@ -213,9 +232,7 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
                                 int num_recs,
                                 ZebraRetrievalRecord *recs);
 /**
                                 int num_recs,
                                 ZebraRetrievalRecord *recs);
 /**
-   \fn int zebra_deleteResultSet(ZebraHandle zh, int function,
-   int num_setnames, char **setnames, int *statuses)
-   \brief delete one or more resultsets 
+   \brief Deletes one or more resultsets 
    \param zh session handle
    \param function Z_DeleteResultSetRequest_{list,all}
    \param num_setnames number of result sets
    \param zh session handle
    \param function Z_DeleteResultSetRequest_{list,all}
    \param num_setnames number of result sets
@@ -227,10 +244,19 @@ int zebra_deleteResultSet(ZebraHandle zh, int function,
                          int num_setnames, char **setnames,
                          int *statuses);
 
                          int num_setnames, char **setnames,
                          int *statuses);
 
+
+
+YAZ_EXPORT
+ZEBRA_RES zebra_result_set_term_no(ZebraHandle zh, const char *setname,
+                                  int *num_terms);
+
+YAZ_EXPORT
+ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname,
+                                    int no, zint *count, int *approx,
+                                    char *termbuf, size_t *termlen);
+
+
 /**
 /**
-   \fn ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream,
-   Z_AttributesPlusTerm *zapt, oid_value attributeset,
-   int *position, int *num_entries, ZebraScanEntry **list, int *is_partial)
    \brief performs Scan (Z39.50 style)
    \param zh session handle
    \param stream ODR handle for result
    \brief performs Scan (Z39.50 style)
    \param zh session handle
    \param stream ODR handle for result
@@ -238,48 +264,42 @@ int zebra_deleteResultSet(ZebraHandle zh, int function,
    \param attributeset Attributeset for Attribute plus Term
    \param position input/output position
    \param num_entries number of terms requested / returned 
    \param attributeset Attributeset for Attribute plus Term
    \param position input/output position
    \param num_entries number of terms requested / returned 
-   \param list list of resulting terms (ODR allocated)
+   \param entries list of resulting terms (ODR allocated)
    \param is_partial upon return 1=partial, 0=complete
 */
 YAZ_EXPORT ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream,
                                Z_AttributesPlusTerm *zapt,
                                oid_value attributeset,
                                int *position, int *num_entries,
    \param is_partial upon return 1=partial, 0=complete
 */
 YAZ_EXPORT ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream,
                                Z_AttributesPlusTerm *zapt,
                                oid_value attributeset,
                                int *position, int *num_entries,
-                               ZebraScanEntry **list,
+                               ZebraScanEntry **entries,
                                int *is_partial);
 
 /**
                                int *is_partial);
 
 /**
-   \fn ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream,
-   const char *query, int *position, int *num_entries, ZebraScanEntry **list, int *is_partial)
    \brief performs Scan (taking PQF string)
    \param zh session handle
    \param stream ODR handle for result
    \param query PQF scan query
    \param position input/output position
    \param num_entries number of terms requested / returned 
    \brief performs Scan (taking PQF string)
    \param zh session handle
    \param stream ODR handle for result
    \param query PQF scan query
    \param position input/output position
    \param num_entries number of terms requested / returned 
-   \param list list of resulting terms (ODR allocated)
+   \param entries list of resulting terms (ODR allocated)
    \param is_partial upon return 1=partial, 0=complete
 */
    \param is_partial upon return 1=partial, 0=complete
 */
-YAZ_EXPORT ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream,
-                                   const char *query,
-                                   int *position, int *num_entries,
-                                   ZebraScanEntry **entries,
-                                   int *is_partial);
+YAZ_EXPORT
+ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
+                   int *position, int *num_entries, ZebraScanEntry **entries,
+                   int *is_partial);
+
 /**
 /**
-   \fn ZEBRA_RES zebra_auth(ZebraHandle zh, const char *user, const char *pass)
    \brief authenticate user. Returns 0 if OK, != 0 on failure
    \param zh session handle
    \param user user name
    \param pass password
  */
    \brief authenticate user. Returns 0 if OK, != 0 on failure
    \param zh session handle
    \param user user name
    \param pass password
  */
-YAZ_EXPORT ZEBRA_RES zebra_auth(ZebraHandle zh,
-                               const char *user, const char *pass);
+YAZ_EXPORT
+ZEBRA_RES zebra_auth(ZebraHandle zh, const char *user, const char *pass);
 
 /**
 
 /**
-   \fn int zebra_string_norm(ZebraHandle zh, unsigned reg_id,
-   const char *input_str, int input_len,
-   char *output_str, int output_len)
-   \brief normalize zebra term for register (subject to change!)
+   \brief Normalize zebra term for register (subject to change!)
    \param zh session handle
    \param reg_id register ID, 'w', 'p',..
    \param input_str input string buffer
    \param zh session handle
    \param reg_id register ID, 'w', 'p',..
    \param input_str input string buffer
@@ -287,21 +307,20 @@ YAZ_EXPORT ZEBRA_RES zebra_auth(ZebraHandle zh,
    \param output_str output string buffer
    \param output_len output string length
  */
    \param output_str output string buffer
    \param output_len output string length
  */
-YAZ_EXPORT int zebra_string_norm(ZebraHandle zh, unsigned reg_id,
-                                 const char *input_str, int input_len,
-                                 char *output_str, int output_len);
+YAZ_EXPORT
+int zebra_string_norm(ZebraHandle zh, unsigned reg_id, const char *input_str, 
+               int input_len, char *output_str, int output_len);
 
 /**
 
 /**
-   \fn ZEBRA_RES zebra_create_database(ZebraHandle zh, const char *db)
-   \brief creates a database
+   \brief Creates a database
    \param zh session handle
    \param db database to be created
 */
    \param zh session handle
    \param db database to be created
 */
-YAZ_EXPORT ZEBRA_RES zebra_create_database(ZebraHandle zh, const char *db);
+YAZ_EXPORT
+ZEBRA_RES zebra_create_database(ZebraHandle zh, const char *db);
 
 /**
 
 /**
-   \fn int zebra_drop_database(ZebraHandle zh, const char *db)
-   \brief deletes a database (drop)
+   \brief Deletes a database (drop)
    \param zh session handle
    \param db database to be deleted
 */
    \param zh session handle
    \param db database to be deleted
 */
@@ -354,7 +373,9 @@ ZEBRA_RES zebra_clean(ZebraHandle zh);
 YAZ_EXPORT
 ZEBRA_RES zebra_init(ZebraHandle zh);
 
 YAZ_EXPORT
 ZEBRA_RES zebra_init(ZebraHandle zh);
 
-YAZ_EXPORT int zebra_compact(ZebraHandle zh);
+YAZ_EXPORT
+ZEBRA_RES zebra_compact(ZebraHandle zh);
+
 YAZ_EXPORT int zebra_repository_update(ZebraHandle zh, const char *path);
 YAZ_EXPORT int zebra_repository_delete(ZebraHandle zh, const char *path);
 YAZ_EXPORT int zebra_repository_show(ZebraHandle zh, const char *path);
 YAZ_EXPORT int zebra_repository_update(ZebraHandle zh, const char *path);
 YAZ_EXPORT int zebra_repository_delete(ZebraHandle zh, const char *path);
 YAZ_EXPORT int zebra_repository_show(ZebraHandle zh, const char *path);
@@ -449,5 +470,87 @@ void zebra_meta_records_destroy(ZebraHandle zh, ZebraMetaRecord *records,
 
 YAZ_EXPORT 
 struct BFiles_struct *zebra_get_bfs(ZebraHandle zh);
 
 YAZ_EXPORT 
 struct BFiles_struct *zebra_get_bfs(ZebraHandle zh);
+
+YAZ_EXPORT
+ZEBRA_RES zebra_set_limit(ZebraHandle zh, int complement_flag, zint *ids);
+
 YAZ_END_CDECL                                
 YAZ_END_CDECL                                
+
+/** \mainpage Zebra
+ *
+ * \section intro_sec Introduction
+ *
+ * Zebra is a search engine for structure data, such as XML, MARC
+ * and others. The following chapters briefly describe each of
+ * Zebra major modules/components.
+ *
+ * \section util Base Utilities
+ *
+ * The Zebra utilities (util.h) defines fundamental types and a few
+ * utilites for Zebra.
+ *
+ * \section res Resources
+ *
+ * The resources system (res.h) is a manager of configuration 
+ * resources. The resources can be viewed as a simple database.
+ * Resources can be read from a configurtion file, they can be
+ * read or written by an application. Resources can also be written,
+ * but that facility is not currently in use.
+ *
+ * \section bfile Bfiles
+ *
+ * The Bfiles (bfile.h) provides a portable interface to the
+ * local file system. It also provides a facility for safe updates
+ * (shadow updates). All file system access is handle by this module
+ * (except for trival reads of configuration files).
+ *
+ * \section dict Dictionary
+ *
+ * The Zebra dictionary (dict.h) maps a search term (key) to a value. The
+ * value is a reference to the list of records identifers in which
+ * the term occurs. Zebra uses an ISAM data structure for the list
+ * of term occurrences. The Dictionary uses \ref bfile.
+ *
+ * \section isam ISAM
+ *
+ * Zebra maintains an ISAM for each term where each ISAM is a list
+ * of record identifiers corresponding to the records in which the
+ * term occur. Unlike traditional ISAM systems, the Zebra ISAM
+ * is compressed. The ISAM system uses \ref bfile.
+ *
+ * Zebra has more than one ISAM system. The old and stable ISAM system
+ * is named isamc (see isamc.h). Another version isams is a write-once
+ * isam system that is quite compact - suitable for CD-ROMs (isams.h). 
+ * The newest ISAM system, isamb, is implemented as a B-Tree (see isamb.h).
+ *
+ * \section data1 Data-1
+ *
+ * The data1 (data1.h) module deals with structured documents. The module can
+ * can read, modify and write documents. The document structure was
+ * originally based on GRS-1 - a Z39.50 v3 structure that predates
+ * DOM. These days the data1 structure may describe XML/SGML as well.
+ * The data1, like DOM, is a tree structure. Each node in the tree
+ * can be of type element, text (cdata), preprocessing instruction,
+ * comment. Element nodes can point to attribute nodes.
+ *
+ * \section recctrl Record Control
+ *
+ * The record control module (recctrl.h) is responsible for
+ * managing the various record types ("classes" or filters).
+ *
+ * \section rset Result-Set
+ *
+ * The Result-Set module (rset.h) defines an interface that all
+ * Zebra Search Results must implement. Each operation (AND, OR, ..)
+ * correspond to an implementation of that interface.
+ *
+ * \section dfa DFA
+ *
+ * DFA (dfa.h) Deterministic Finite Automa is a regular expression engine.
+ * The module compiles a regular expression to a DFA. The DFA can then
+ * be used in various application to perform fast match against the
+ * origianl expression. The \ref Dict uses DFA to perform lookup
+ * using regular expressions.
+ */
+
 #endif
 #endif