Fixed bug related to ranking, introduced by 'metadata' update.
authorSebastian Hammer <quinn@indexdata.com>
Mon, 8 Jan 2007 19:39:12 +0000 (19:39 +0000)
committerSebastian Hammer <quinn@indexdata.com>
Mon, 8 Jan 2007 19:39:12 +0000 (19:39 +0000)
Also introduced 'rank' attribute to service/metadata element. Specifies
a 'boost' factor to apply a given element. Default=1, 0=don't use this field
for ranking.

etc/pazpar2.cfg
src/config.c
src/config.h
src/http_command.c
src/pazpar2.c
src/relevance.c

index 2b84e08..5143d4a 100644 (file)
@@ -5,10 +5,10 @@
   <proxy host="localhost" port="80"/>
 
   <service>
-    <metadata name="title" brief="yes" sortkey="skiparticle" merge="longest"/>
+    <metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6"/>
     <!-- <metadata name="date" brief="yes" sortkey="numeric" type="year" merge="range"/> -->
-    <metadata name="author" brief="yes" termlist="yes" merge="longest"/>
-    <metadata name="subject" merge="unique" termlist="yes"/>
+    <metadata name="author" brief="yes" termlist="yes" merge="longest" rank="2"/>
+    <metadata name="subject" merge="unique" termlist="yes" rank="3"/>
   </service>
 </server>
 
index 46c3f64..2de8479 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: config.c,v 1.5 2007-01-08 18:32:35 quinn Exp $ */
+/* $Id: config.c,v 1.6 2007-01-08 19:39:12 quinn Exp $ */
 
 #include <string.h>
 
@@ -54,6 +54,7 @@ static struct conf_service *parse_service(xmlNode *node)
             xmlChar *merge = xmlGetProp(n, "merge");
             xmlChar *type = xmlGetProp(n, "type");
             xmlChar *termlist = xmlGetProp(n, "termlist");
+            xmlChar *rank = xmlGetProp(n, "rank");
 
             if (!name)
             {
@@ -87,6 +88,11 @@ static struct conf_service *parse_service(xmlNode *node)
             else
                 md->termlist = 0;
 
+            if (rank)
+                md->rank = atoi(rank);
+            else
+                md->rank = 1;
+
             if (type)
             {
                 if (!strcmp(type, "generic"))
@@ -148,6 +154,7 @@ static struct conf_service *parse_service(xmlNode *node)
             xmlFree(sortkey);
             xmlFree(merge);
             xmlFree(termlist);
+            xmlFree(rank);
             md_node++;
         }
         else
index 346707a..8b3cfd2 100644 (file)
@@ -11,6 +11,7 @@ struct conf_metadata
     char *name;  // The name of this element. Output by normalization stylesheet
     int brief;   // Is this element to be returned in the brief format?
     int termlist;// Is this field to be treated as a termlist for browsing?
+    int rank;    // Rank factor. 0 means don't use this field for ranking, 1 is default
     enum
     {
         Metadata_type_generic,          // Generic text field
index 66c903c..32a1329 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: http_command.c,v 1.10 2007-01-08 18:32:35 quinn Exp $
+ * $Id: http_command.c,v 1.11 2007-01-08 19:39:12 quinn Exp $
  */
 
 #include <stdio.h>
@@ -316,6 +316,7 @@ static void show_records(struct http_channel *c, int active)
         struct conf_service *service = global_parameters.server->service;
         int imeta;
 
+        yaz_log(YLOG_LOG, "Record, rank=%d", rec->relevance);
         wrbuf_puts(c->wrbuf, "<hit>\n");
         for (imeta = 0; imeta < service->num_metadata; imeta++)
         {
index 22ec100..17ce62f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pazpar2.c,v 1.19 2007-01-08 18:32:35 quinn Exp $ */;
+/* $Id: pazpar2.c,v 1.20 2007-01-08 19:39:12 quinn Exp $ */;
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -545,7 +545,8 @@ static struct record *ingest_record(struct client *cl, Z_External *rec)
             else
                 yaz_log(YLOG_WARN, "Don't know how to merge on element name %s", md->name);
 
-            relevance_countwords(se->relevance, cluster, value, 4);
+            if (md->rank)
+                relevance_countwords(se->relevance, cluster, value, md->rank);
             if (md->termlist)
                 add_facet(se, type, value);
             xmlFree(type);
index c7c3f12..b1713e0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: relevance.c,v 1.5 2007-01-08 18:32:35 quinn Exp $
+ * $Id: relevance.c,v 1.6 2007-01-08 19:39:12 quinn Exp $
  */
 
 #include <ctype.h>
@@ -194,8 +194,8 @@ static int comp(const void *p1, const void *p2)
 #else
 static int comp(const void *p1, const void *p2)
 {
-    struct record **r1 = (struct record **) p1;
-    struct record **r2 = (struct record **) p2;
+    struct record_cluster **r1 = (struct record_cluster **) p1;
+    struct record_cluster **r2 = (struct record_cluster **) p2;
     return (*r2)->relevance - (*r1)->relevance;
 }
 #endif