New ranking rank-2 .. Like rank-1 but subtracts staticrank.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 24 Mar 2009 15:50:49 +0000 (16:50 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 24 Mar 2009 15:50:49 +0000 (16:50 +0100)
rank-2 is a combination of rank-1 and static rank.. The staticrank
is inverse (lowest value comes first, etc..). rank-2 thus substracts that
from score. This allows a system to specify a "base" rank (=staticrank).

index/rank.h
index/rank1.c
index/zebraapi.c
test/xslt/snippet.xsl

index cff9646..c86b191 100644 (file)
@@ -49,6 +49,7 @@ void zebraRankDestroy (struct zebra_register *reg);
 /* declaring externally defined rank class structures */
 /* remember to install rank classes in zebraapi.c as well!! */
 extern struct rank_control *rank_1_class;
+extern struct rank_control *rank_2_class;
 extern struct rank_control *rank_zv_class;
 extern struct rank_control *rank_static_class;
 extern struct rank_control *rank_similarity_class;
index b4558ef..48f33ea 100644 (file)
@@ -186,8 +186,8 @@ static void add(void *set_handle, int seqno, TERMID term)
  *  score should be between 0 and 1000. If score cannot be obtained
  *  -1 should be returned.
  */
-static int calc(void *set_handle, zint sysno, zint staticrank,
-                int *stop_flag)
+static int calc_1(void *set_handle, zint sysno, zint staticrank,
+                  int *stop_flag)
 {
     int i, lo, divisor, score = 0;
     struct rank_set_info *si = (struct rank_set_info *) set_handle;
@@ -214,6 +214,13 @@ static int calc(void *set_handle, zint sysno, zint staticrank,
     return score;
 }
 
+static int calc_2(void *set_handle, zint sysno, zint staticrank,
+                  int *stop_flag)
+{
+    int score = calc_1(set_handle, sysno, staticrank, stop_flag);
+    return score - staticrank;
+}
+
 /*
  * Pseudo-meta code with sequence of calls as they occur in a
  * server. Handlers are prefixed by --:
@@ -232,17 +239,28 @@ static int calc(void *set_handle, zint sysno, zint staticrank,
  *     server close
  */
 
-static struct rank_control rank_control = {
+static struct rank_control rank_1_control = {
     "rank-1",
     create,
     destroy,
     begin,
     end,
-    calc,
+    calc_1,
+    add,
+};
+struct rank_control *rank_1_class = &rank_1_control;
+static struct rank_control rank_2_control = {
+    "rank-2",
+    create,
+    destroy,
+    begin,
+    end,
+    calc_2,
     add,
 };
  
-struct rank_control *rank_1_class = &rank_control;
+struct rank_control *rank_2_class = &rank_2_control;
 /*
  * Local variables:
  * c-basic-offset: 4
index b4cade1..631aaff 100644 (file)
@@ -407,6 +407,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
     
     /* installing rank classes */
     zebraRankInstall(reg, rank_1_class);
+    zebraRankInstall(reg, rank_2_class);
     zebraRankInstall(reg, rank_similarity_class);
     zebraRankInstall(reg, rank_static_class);
 
index 475c216..67edbb3 100644 (file)
@@ -5,6 +5,7 @@
 <xsl:param name="snippet" select="''"/>
 <xsl:param name="score" select="''"/>
 <xsl:param name="id" select="''"/>
+<xsl:param name="rank" select="''"/>
 <xsl:output indent="yes"
       method="xml"
       version="1.0"
@@ -14,6 +15,7 @@
    <snippet>
      <id><xsl:value-of select="$id"/></id>
      <score><xsl:value-of select="$score"/></score>
+     <rank><xsl:value-of select="$rank"/></rank>
      <xsl:copy-of select="$snippet"/>
    </snippet>
  </xsl:template>