Remove unneeded debug logs
[idzebra-moved-to-github.git] / index / ranksimilarity.c
index ace230b..c450078 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ranksimilarity.c,v 1.2 2006-05-03 13:55:20 marc Exp $
+/* $Id: ranksimilarity.c,v 1.5 2006-05-08 14:03:16 marc Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -40,24 +40,58 @@ struct ranksimilarity_class_info {
   int dummy;
 };
 
+/** term specific info and statistics to be used under ranking */
 struct ranksimilarity_term_info {
-  /* frequency of term within document */
-  int freq_term_doc;
-  /* frequency of term within result set */
+
+  /** frequency of term within document field */
+  int freq_term_docfield;
+
+  /** frequency of term within result set of given term */
   zint freq_term_resset;
-  /* rank flag is one if term is to be included in ranking */
+
+  /** number of docs within result set */
+  zint no_docs_resset;
+
+  /** number of terms in this field */
+  zint no_terms_field;
+
+  /** number of docs with this field in database */
+  zint no_docs_field;
+
+  /** size of all docs with this field in database (in bytes ir terms ??) */
+  zint size_docs_field;
+
+  /** rank flag is one if term is to be included in ranking */
   int rank_flag;
-  /* relative ranking weight of term */
-  int term_weight;
+
+  /** relative ranking weight of term field */
+  int field_weight;
+
+  /** term id used to access term name and other info */
   TERMID term;
+
+  /** index number in terms[i] array */
   int term_index;
 };
 
 struct ranksimilarity_set_info {
   int last_pos;
-  int no_entries;
-  int no_rank_entries;
+
+  /** number of terms in query */
+  int no_terms_query;
+
+  /** number of terms in query which are included in ranking */
+  int no_ranked_terms_query;
+
+  /** number of documents in entire collection */
+  zint no_docs_database;
+
+  /** size of all documents in entire collection (in bytes or terms ??)*/
+  zint size_docs_database;
+
+  /** array of size no_terms_query with statistics gathered per term */
   struct ranksimilarity_term_info *entries;
+
   NMEM nmem;
 };
 
@@ -67,9 +101,10 @@ static void  ranksimilar_rec_reset(struct ranksimilarity_set_info *si)
 {
   int i;
   
-  for (i = 0; i < si->no_entries; i++){
-    si->entries[i].freq_term_doc = 0;
-  }
+  for (i = 0; i < si->no_terms_query; i++)
+    {
+      si->entries[i].freq_term_docfield = 0;
+    }
 }
 
 
@@ -120,9 +155,15 @@ static void *begin (struct zebra_register *reg,
     
   yaz_log(log_level, "begin() numterms=%d", numterms);
  
-  si->no_entries = numterms;
-  /* count how many terms are ranked (2=102 or similar) */
-  si->no_rank_entries = 0;
+  /* setting database global statistics */
+   si->no_docs_database = -1;  /* TODO */
+   si->size_docs_database = -1;  /* TODO */
+
+  /* setting query statistics */
+   si->no_terms_query = numterms;
+   si->no_ranked_terms_query = 0;
+
+  /* setting internal data structures */
   si->nmem=nmem;
   si->entries = (struct ranksimilarity_term_info *)
     nmem_malloc (si->nmem, sizeof(*si->entries)*numterms); 
@@ -148,17 +189,39 @@ static void *begin (struct zebra_register *reg,
         {
           const char *cp = strstr(terms[i]->flags+4, ",w=");
 
-          (si->no_rank_entries)++;
+          yaz_log(log_level, "begin() terms[%d]: '%s' flags=%s", 
+                  i, terms[i]->name, terms[i]->flags);
+
+          (si->no_ranked_terms_query)++;
           ol = terms[i]->ol;
+
           si->entries[i].rank_flag = 1;
+          /* notice that the call to rset_count(rset) has he side-effect 
+             of setting rset->hits_limit = rset_count(rset) ??? */
           si->entries[i].freq_term_resset = rset_count(terms[i]->rset);
+          si->entries[i].no_docs_resset =  terms[i]->rset->hits_count;
+          si->entries[i].no_docs_field = -1;   /*TODO*/
+          si->entries[i].size_docs_field = -1;   /*TODO*/
+          si->entries[i].no_terms_field = -1;   /*TODO*/
+
           if (cp)
-            si->entries[i].term_weight = atoi (cp+3);
+            si->entries[i].field_weight = atoi (cp+3);
           else
-            si->entries[i].term_weight = 34; /* sqrroot of 1000 */
-
-          yaz_log(log_level, "begin() terms[%d]: '%s' flags=%s", 
-                  i, terms[i]->name, terms[i]->flags);
+            si->entries[i].field_weight = 34; /* sqrroot of 1000 */
+
+
+          /*
+          yaz_log(log_level, "begin() rset_count(terms[%d]->rset) = " 
+                  ZINT_FORMAT, i, rset_count(terms[i]->rset)); 
+          yaz_log(log_level, "begin() terms[%d]->rset->hits_limit = "
+                  ZINT_FORMAT, i, terms[i]->rset->hits_limit); 
+          yaz_log(log_level, "begin() terms[%d]->rset->hits_count = "
+                  ZINT_FORMAT, i, terms[i]->rset->hits_count); 
+          yaz_log(log_level, "begin() terms[%d]->rset->hits_round = "
+                  ZINT_FORMAT, i, terms[i]->rset->hits_round); 
+          yaz_log(log_level, "begin() terms[%d]->rset->hits_approx = %d", 
+                  i, terms[i]->rset->hits_approx);
+          */
           
           /* looping indexes where term terms[i] is found */
           for (; ol; ol = ol->next)
@@ -175,11 +238,11 @@ static void *begin (struct zebra_register *reg,
               
               if (string_index)
                yaz_log(log_level, 
-                        "begin() index: ord=%d type=%c db=%s str-index=%s",
+                        "begin()    index: ord=%d type=%c db=%s str-index=%s",
                         ol->ord, index_type, db, string_index);
               else
                yaz_log(log_level, 
-                        "begin() index: ord=%d type=%c db=%s set=%d use=%d",
+                        "begin()    index: ord=%d type=%c db=%s set=%d use=%d",
                         ol->ord, index_type, db, set, use);
             }
      
@@ -205,6 +268,7 @@ static void end (struct zebra_register *reg, void *set_handle)
 }
 
 
+
 /**
  * add: Called for each word occurence in a result set. This routine
  *  should be as fast as possible. This routine should "incrementally"
@@ -218,16 +282,16 @@ static void add (void *set_handle, int seqno, TERMID term)
   assert(si);
   if (!term)
     {
-      yaz_log(log_level, "add() seqno=%d NULL term", seqno);
+      /* yaz_log(log_level, "add() seqno=%d NULL term", seqno); */
       return;
     }
 
   ti= (struct ranksimilarity_term_info *) term->rankpriv;
   assert(ti);
   si->last_pos = seqno;
-  ti->freq_term_doc++;
-  yaz_log(log_level, "add() seqno=%d term=%s freq_term_doc=%d", 
-     seqno, term->name, ti->freq_term_doc);
+  ti->freq_term_docfield++;
+  /* yaz_log(log_level, "add() seqno=%d term=%s freq_term_docfield=%d", 
+     seqno, term->name, ti->freq_term_docfield); */
 }
 
 /*
@@ -244,16 +308,20 @@ static int calc (void *set_handle, zint sysno, zint staticrank,
     = (struct ranksimilarity_set_info *) set_handle;
   
   
-  yaz_log(log_level, "calc() sysno =      %d", sysno);
-  yaz_log(log_level, "calc() staticrank = %d", staticrank);
+  yaz_log(log_level, "calc() sysno =      " ZINT_FORMAT, sysno);
+  yaz_log(log_level, "calc() staticrank = " ZINT_FORMAT, staticrank);
         
-  yaz_log(log_level, "calc() si->no_entries = %d", 
-          si->no_entries);
-  yaz_log(log_level, "calc() si->no_rank_entries = %d", 
-          si->no_rank_entries);
+  yaz_log(log_level, "calc() si->no_terms_query = %d", 
+          si->no_terms_query);
+  yaz_log(log_level, "calc() si->no_ranked_terms_query = %d", 
+          si->no_ranked_terms_query);
+  yaz_log(log_level, "calc() si->no_docs_database = " ZINT_FORMAT,  
+          si->no_docs_database); 
+  yaz_log(log_level, "calc() si->size_docs_database = " ZINT_FORMAT,  
+          si->size_docs_database); 
 
   
-  if (!si->no_rank_entries)
+  if (!si->no_ranked_terms_query)
     return -1;   /* ranking not enabled for any terms */
 
   
@@ -262,21 +330,29 @@ static int calc (void *set_handle, zint sysno, zint staticrank,
 
   /* here goes your formula to compute a scoring function */
   /* you may use all the gathered statistics here */
-  for (i = 0; i < si->no_entries; i++)
+  for (i = 0; i < si->no_terms_query; i++)
     {
-      yaz_log(log_level, "calc() entries[%d] termid %d", 
+      yaz_log(log_level, "calc() entries[%d] termid %p", 
               i, si->entries[i].term);
       if (si->entries[i].term){
         yaz_log(log_level, "calc() entries[%d] term '%s' flags=%s", 
                 i, si->entries[i].term->name, si->entries[i].term->flags);
         yaz_log(log_level, "calc() entries[%d] rank_flag %d", 
                 i, si->entries[i].rank_flag );
-        yaz_log(log_level, "calc() entries[%d] term_weight %d", 
-                i, si->entries[i].term_weight );
-        yaz_log(log_level, "calc() entries[%d] freq_term_doc %d", 
-                i, si->entries[i].freq_term_doc );
-        yaz_log(log_level, "calc() entries[%d] freq_term_resset %d", 
+        yaz_log(log_level, "calc() entries[%d] field_weight %d", 
+                i, si->entries[i].field_weight );
+        yaz_log(log_level, "calc() entries[%d] freq_term_docfield %d", 
+                i, si->entries[i].freq_term_docfield );
+        yaz_log(log_level, "calc() entries[%d] freq_term_resset " ZINT_FORMAT,
                 i, si->entries[i].freq_term_resset );
+        yaz_log(log_level, "calc() entries[%d] no_docs_resset " ZINT_FORMAT, 
+                i, si->entries[i].no_docs_resset );
+        yaz_log(log_level, "calc() entries[%d] no_docs_field " ZINT_FORMAT, 
+                i, si->entries[i].no_docs_field );
+        yaz_log(log_level, "calc() entries[%d] size_docs_field " ZINT_FORMAT, 
+                i, si->entries[i].size_docs_field );
+        yaz_log(log_level, "calc() entries[%d] no_terms_field " ZINT_FORMAT, 
+                i, si->entries[i].no_terms_field );
       }
     }