X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frsrel.c;h=cf945f46ff4ca718fe89c24ca4d37cb4bdcbb93b;hb=edf09fc5529eae3e8214a432058b4c07b2b8d2f9;hp=16efb8e57dd1ecbdba13f0e7aa60a72d301b961d;hpb=80eb0a73f541530f383715296203036b3adbacc2;p=idzebra-moved-to-github.git diff --git a/rset/rsrel.c b/rset/rsrel.c index 16efb8e..cf945f4 100644 --- a/rset/rsrel.c +++ b/rset/rsrel.c @@ -4,8 +4,18 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rsrel.c,v $ - * Revision 1.10 1996-06-11 10:54:29 quinn - * Relevance work + * Revision 1.14 1996-11-08 11:15:58 adam + * Compressed isam fully supported. + * + * Revision 1.13 1996/10/29 13:55:26 adam + * Include of zebrautl.h instead of alexutil.h. + * + * Revision 1.12 1996/10/08 13:00:40 adam + * Bug fix: result sets with ranked operands in boolean operations weren't + * sorted. + * + * Revision 1.11 1996/10/07 16:05:29 quinn + * Work. * * Revision 1.9 1995/12/11 09:15:26 adam * New set types: sand/sor/snot - ranked versions of and/or/not in @@ -47,8 +57,9 @@ #include #include +#include #include -#include +#include static void *r_create(const struct rset_control *sel, void *parms, int *flags); @@ -151,13 +162,22 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) char *isam_tmp_buf; int *isam_r; int *max_tf, *tf; - ISPT *isam_pt; + ISPT *isam_pt = NULL; + ISAMC_PP *isamc_pp = NULL; int i; logf (LOG_DEBUG, "relevance"); isam_buf = xmalloc (parms->no_isam_positions * sizeof(*isam_buf)); isam_r = xmalloc (sizeof (*isam_r) * parms->no_isam_positions); - isam_pt = xmalloc (sizeof (*isam_pt) * parms->no_isam_positions); + if (parms->is) + isam_pt = xmalloc (sizeof (*isam_pt) * parms->no_isam_positions); + else if (parms->isc) + isamc_pp = xmalloc (sizeof (*isamc_pp) * parms->no_isam_positions); + else + { + logf (LOG_FATAL, "No isamc or isam in rs_rel"); + abort (); + } isam_tmp_buf = xmalloc (info->key_size); max_tf = xmalloc (sizeof (*max_tf) * parms->no_terms); tf = xmalloc (sizeof (*tf) * parms->no_terms); @@ -167,9 +187,18 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) for (i = 0; ino_isam_positions; i++) { isam_buf[i] = xmalloc (info->key_size); - isam_pt[i] = is_position (parms->is, parms->isam_positions[i]); - max_tf [parms->term_no[i]] = is_numkeys (isam_pt[i]); - isam_r[i] = is_readkey (isam_pt[i], isam_buf[i]); + if (isam_pt) + { + isam_pt[i] = is_position (parms->is, parms->isam_positions[i]); + max_tf [parms->term_no[i]] = is_numkeys (isam_pt[i]); + isam_r[i] = is_readkey (isam_pt[i], isam_buf[i]); + } + else if (isamc_pp) + { + isamc_pp[i] = isc_pp_open (parms->isc, parms->isam_positions[i]); + max_tf [parms->term_no[i]] = isc_pp_num (isamc_pp[i]); + isam_r[i] = isc_pp_read (isamc_pp[i], isam_buf[i]); + } logf (LOG_DEBUG, "max tf %d = %d", i, max_tf[i]); } while (1) @@ -189,10 +218,10 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) co_oc = 1; } else if (!r && last_term != parms->term_no[i]) /* new occurrence */ - co_oc++; + co_oc++; last_term = parms->term_no[i]; } - + if (min < 0) break; memcpy (isam_tmp_buf, isam_buf[min], info->key_size); @@ -207,16 +236,15 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) r = (*parms->cmp)(isam_buf[i], isam_tmp_buf); else r = 2; -#if 0 - if (r > 1 || r < -1) - wgt[parms->term_no[i]] = 0.0; -#endif if (r <= 1 && r >= -1) { do { tf[parms->term_no[i]]++; - isam_r[i] = is_readkey (isam_pt[i], isam_buf[i]); + 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]); } while (isam_r[i] && (*parms->cmp)(isam_buf[i], isam_tmp_buf) <= 1); } @@ -236,7 +264,10 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) qsort (info->sysno_idx, info->no_rec, sizeof(*info->sysno_idx), qcomp); for (i = 0; ino_isam_positions; i++) { - is_pt_free (isam_pt[i]); + if (isam_pt) + is_pt_free (isam_pt[i]); + if (isamc_pp) + isc_pp_close (isamc_pp[i]); xfree (isam_buf[i]); } xfree (max_tf); @@ -244,6 +275,7 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) xfree (isam_buf); xfree (isam_r); xfree (isam_pt); + xfree (isamc_pp); xfree(tf); }