New ranking type relevance_h
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 22 Nov 2013 10:32:20 +0000 (11:32 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 22 Nov 2013 10:32:20 +0000 (11:32 +0100)
src/pazpar2_config.c
src/pazpar2_config.h
src/reclists.c
src/relevance.c
src/relevance.h
src/session.c
test/test_url.urls

index 8068b13..b11148d 100644 (file)
@@ -1017,6 +1017,9 @@ static void info_service_metadata(struct conf_service *service, WRBUF w)
                     case Metadata_sortkey_relevance:
                         wrbuf_puts(w, "relevance");
                         break;
+                    case Metadata_sortkey_relevance_h:
+                        wrbuf_puts(w, "relevance_h");
+                        break;
                     case Metadata_sortkey_numeric:
                         wrbuf_puts(w, "numeric");
                         break;
index ee195b9..6cf7cb2 100644 (file)
@@ -20,8 +20,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #ifndef PAZPAR2_CONFIG_H
 #define PAZPAR2_CONFIG_H
 
-#include "normalize_cache.h"
+#include <libxml/parser.h>
+#include <libxml/tree.h>
 
+#include "normalize_cache.h"
 #include <yaz/nmem.h>
 #include <yaz/mutex.h>
 #include <yaz/ccl.h>
@@ -47,6 +49,7 @@ enum conf_metadata_merge {
 
 enum conf_sortkey_type {
     Metadata_sortkey_relevance,
+    Metadata_sortkey_relevance_h,   // Heikki's ranking
     Metadata_sortkey_numeric,       // Standard numerical sorting
     Metadata_sortkey_skiparticle,   // Skip leading article when sorting
     Metadata_sortkey_string,        // Flat string
index b16a60e..bec6268 100644 (file)
@@ -101,6 +101,10 @@ struct reclist_sortparms *reclist_parse_sortparms(NMEM nmem, const char *parms,
             {
                 type = Metadata_sortkey_relevance;
             }
+            else if (!strcmp(parm, "relevance_h"))
+            {
+                type = Metadata_sortkey_relevance_h;
+            }
             else if (!strcmp(parm, "position"))
             {
                 type = Metadata_sortkey_position;
@@ -159,6 +163,9 @@ static int reclist_cmp(const void *p1, const void *p2)
         case Metadata_sortkey_relevance:
             res = r2->relevance_score - r1->relevance_score;
             break;
+        case Metadata_sortkey_relevance_h:
+            res = r2->relevance_score - r1->relevance_score;
+            break;
         case Metadata_sortkey_string:
             s1 = ut1 ? ut1->text.sort : "";
             s2 = ut2 ? ut2->text.sort : "";
index 08527ae..2fd7414 100644 (file)
@@ -25,6 +25,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <math.h>
 #include <stdlib.h>
 
+#include "pazpar2_config.h"
 #include "relevance.h"
 #include "session.h"
 
@@ -352,7 +353,8 @@ void relevance_donerecord(struct relevance *r, struct record_cluster *cluster)
 }
 
 // Prepare for a relevance-sorted read
-void relevance_prepare_read(struct relevance *rel, struct reclist *reclist)
+void relevance_prepare_read(struct relevance *rel, struct reclist *reclist,
+                            enum conf_sortkey_type type)
 {
     int i;
     float *idfvec = xmalloc(rel->vec_len * sizeof(float));
@@ -412,6 +414,8 @@ void relevance_prepare_read(struct relevance *rel, struct reclist *reclist)
         {
             wrbuf_printf(w, "score = relevance(%d);\n", relevance);
         }
+        if (0 && type == Metadata_sortkey_relevance_h)
+            relevance *= 2;
         rec->relevance_score = relevance;
     }
     reclist_leave(reclist);
index 76bbc22..1a6f398 100644 (file)
@@ -44,7 +44,8 @@ int relevance_snippet(struct relevance *r,
 
 void relevance_donerecord(struct relevance *r, struct record_cluster *cluster);
 
-void relevance_prepare_read(struct relevance *rel, struct reclist *rec);
+void relevance_prepare_read(struct relevance *rel, struct reclist *rec,
+                            enum conf_sortkey_type type);
 
 #endif
 
index 9091b6b..f07bfcb 100644 (file)
@@ -1314,9 +1314,10 @@ struct record_cluster **show_range_start(struct session *se,
     if (se->relevance)
     {
         for (spp = sp; spp; spp = spp->next)
-            if (spp->type == Metadata_sortkey_relevance)
+            if (spp->type == Metadata_sortkey_relevance
+                || spp->type == Metadata_sortkey_relevance_h)
             {
-                relevance_prepare_read(se->relevance, se->reclist);
+                relevance_prepare_read(se->relevance, se->reclist, spp->type);
                 break;
             }
         for (l = se->clients_active; l; l = l->next) {
index 6694fe6..045a7c8 100644 (file)
@@ -17,7 +17,7 @@ http://localhost:9763/search.pz2?session=1&command=search&query=water
 2 http://localhost:9763/search.pz2?session=1&command=show&block=1&sort=title:1p
 2 http://localhost:9763/search.pz2?session=1&command=show&block=1&sort=date:0p
 http://localhost:9763/search.pz2?session=1&command=service
-http://localhost:9763/search.pz2?session=1&command=show&sort=relevance
+http://localhost:9763/search.pz2?session=1&command=show&sort=relevance_h
 http://localhost:9763/search.pz2?session=1&command=record&id=content%3A+title+coal+sample+bank+author+medium+book
 http://localhost:9763/search.pz2?session=1&command=show&block=1&sort=title:1
-http://localhost:9763/search.pz2?session=1&command=record&id=content%3A+title+coal+sample+bank+author+medium+book
\ No newline at end of file
+http://localhost:9763/search.pz2?session=1&command=record&id=content%3A+title+coal+sample+bank+author+medium+book