X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=rset%2Frsrel.c;h=0850aff3ae6f99354cc78523015a142668d8cd50;hb=b0728a451f81973f750f6a806b566d506a17dbe9;hp=cf945f46ff4ca718fe89c24ca4d37cb4bdcbb93b;hpb=82bdd90d99e036b5c491666b5be5471c59f8e1b8;p=idzebra-moved-to-github.git diff --git a/rset/rsrel.c b/rset/rsrel.c index cf945f4..0850aff 100644 --- a/rset/rsrel.c +++ b/rset/rsrel.c @@ -1,10 +1,20 @@ /* - * Copyright (C) 1994-1995, Index Data I/S + * Copyright (C) 1994-1997, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: rsrel.c,v $ - * Revision 1.14 1996-11-08 11:15:58 adam + * Revision 1.17 1997-09-22 12:39:07 adam + * Added get_pos method for the ranked result sets. + * + * Revision 1.16 1997/09/17 12:19:23 adam + * Zebra version corresponds to YAZ version 1.4. + * Changed Zebra server so that it doesn't depend on global common_resource. + * + * Revision 1.15 1997/09/09 13:38:16 adam + * Partial port to WIN95/NT. + * + * Revision 1.14 1996/11/08 11:15:58 adam * Compressed isam fully supported. * * Revision 1.13 1996/10/29 13:55:26 adam @@ -54,6 +64,7 @@ #include #include +#include #include #include @@ -93,6 +104,7 @@ struct rset_rel_info { int max_rec; int no_rec; int (*cmp)(const void *p1, const void *p2); + int (*get_pos)(const void *p); char *key_buf; /* key buffer */ float *score_buf; /* score buffer */ int *sort_idx; /* score sorted index */ @@ -201,6 +213,27 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) } logf (LOG_DEBUG, "max tf %d = %d", i, max_tf[i]); } +#if 0 + while (1) + { + int r, min = -1; + int pos = 0; + for (i = 0; ino_isam_positions; i++) + if (isam_r[i] && + (min < 0 || + (r = (*parms->cmp)(isam_buf[i], isam_buf[min])) < 1)) + min = i; + if (min < 0) + break; + i = min; + pos = (*parms->get_pos)(isam_buf[i]); + logf (LOG_LOG, "pos=%d", pos); + if (isam_pt) + isam_r[i] = is_readkey (isam_pt[i], isam_buf[i]); + else if (isamc_pp) + isam_r[i] = isc_pp_read (isamc_pp[i], isam_buf[i]); + } +#else while (1) { int min = -1, i, r; @@ -258,6 +291,7 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) /* if value is in the top score, then save it - don't emit yet */ add_rec (info, score/parms->no_terms, isam_tmp_buf); } +#endif for (i = 0; ino_rec; i++) info->sysno_idx[i] = i; qsort_info = info; @@ -292,6 +326,7 @@ static void *r_create (const struct rset_control *sel, void *parms, info->max_rec = r_parms->max_rec; assert (info->max_rec > 1); info->cmp = r_parms->cmp; + info->get_pos = r_parms->get_pos; info->key_buf = xmalloc (info->key_size * info->max_rec); info->score_buf = xmalloc (sizeof(*info->score_buf) * info->max_rec);