+ /* find min with lowest sysno */
+ for (i = 0; i<parms->no_isam_positions; i++)
+ if (isam_r[i] &&
+ (min < 0 || (*parms->cmp)(isam_buf[i], isam_buf[min]) < 1))
+ min = i;
+ if (min < 0)
+ break;
+ memcpy (isam_tmp_buf, isam_buf[min], info->key_size);
+ /* calculate for all with those sysno */
+ for (i = 0; i<parms->no_isam_positions; i++)
+ {
+ int r;
+
+ if (isam_r[i])
+ r = (*parms->cmp)(isam_buf[i], isam_tmp_buf);
+ else
+ r = 2;
+ if (r > 1 || r < -1)
+ wgt[i] = 0.0;
+ else
+ {
+ int tf = 0;
+ do
+ {
+ tf++;
+ isam_r[i] = is_readkey (isam_pt[i], isam_buf[i]);
+ } while (isam_r[i] &&
+ (*parms->cmp)(isam_buf[i], isam_tmp_buf) <= 1);
+ wgt[i] = 0.1+tf*0.9/max_tf[i];
+ }
+ }
+ /* calculate relevance value */
+ score = 0.0;
+ for (i = 0; i<parms->no_isam_positions; i++)
+ score += wgt[i];
+ /* if value is in the top score, then save it - don't emit yet */
+ add_rec (info, score, isam_tmp_buf);
+ }