X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=eeee1b728d7e63fca1c0ef40efe6bf3abdfa1c05;hb=d79f0901b184c1bcf383be8500aee3cfd197ca1d;hp=9da23d185031e3bd7bf2194b9e5273b477df511c;hpb=3679505d0d073f7db6425e597eb559b53e8c4827;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index 9da23d1..eeee1b7 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,10 +1,21 @@ /* - * Copyright (C) 1994-1997, Index Data I/S + * Copyright (C) 1994-1998, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: zrpn.c,v $ - * Revision 1.69 1997-10-29 12:05:02 adam + * Revision 1.72 1998-01-07 13:53:41 adam + * Queries using simple ranked operands returns right number of hits. + * + * Revision 1.71 1997/12/18 10:54:24 adam + * New method result set method rs_hits that returns the number of + * hits in result-set (if known). The ranked result set returns real + * number of hits but only when not combined with other operands. + * + * Revision 1.70 1997/10/31 12:34:43 adam + * Changed a few log statements. + * + * Revision 1.69 1997/10/29 12:05:02 adam * Server produces diagnostic "Unsupported Attribute Set" when appropriate. * * Revision 1.68 1997/10/27 14:33:06 adam @@ -354,8 +365,7 @@ static void add_isam_p (const char *info, struct grep_info *p) ISAM_P *new_isam_p_buf; #ifdef TERM_COUNT int *new_term_no; -#endif - +#endif p->isam_p_size = 2*p->isam_p_size + 100; new_isam_p_buf = xmalloc (sizeof(*new_isam_p_buf) * p->isam_p_size); @@ -770,7 +780,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, term_dict[prefix_len++] = ')'; term_dict[prefix_len++] = 1; term_dict[prefix_len++] = reg_type; - logf (LOG_LOG, "reg_type = %d", term_dict[prefix_len-1]); + logf (LOG_DEBUG, "reg_type = %d", term_dict[prefix_len-1]); term_dict[prefix_len] = '\0'; if (!relational_term (zi, zapt, &termp, term_dict, attributeSet, grep_info, &max_pos, reg_type)) @@ -907,12 +917,13 @@ static RSET rpn_search_APT_relevance (ZServerInfo *zi, int r; parms.key_size = sizeof(struct it_key); - parms.max_rec = 1000; + parms.max_rec = 200; parms.cmp = key_compare_it; parms.get_pos = key_get_pos; parms.is = zi->isam; parms.isc = zi->isamc; parms.no_terms = 0; + parms.method = RSREL_METHOD_A; if (zapt->term->which != Z_Term_general) { @@ -1158,7 +1169,7 @@ static RSET rpn_search_APT_phrase (ZServerInfo *zi, while (1) { - logf (LOG_LOG, "APT_phrase termp=%s", termp); + logf (LOG_DEBUG, "APT_phrase termp=%s", termp); grep_info.isam_p_indx = 0; r = field_term (zi, zapt, &termp, attributeSet, &grep_info, reg_type, complete_flag, num_bases, basenames); @@ -1395,6 +1406,7 @@ static void count_set (RSET r, int *count) RSFD rfd; logf (LOG_DEBUG, "count_set"); + *count = 0; rfd = rset_open (r, RSETF_READ|RSETF_SORT_SYSNO); while (rset_read (r, rfd, &key)) @@ -1414,6 +1426,7 @@ int rpn_search (ZServerInfo *zi, Z_RPNQuery *rpn, int num_bases, char **basenames, const char *setname, int *hits) { + int i; RSET rset; oident *attrset; oid_value attributeSet; @@ -1430,7 +1443,9 @@ int rpn_search (ZServerInfo *zi, if (!rset) return zi->errCode; if (rset_is_volatile(rset)) - count_set_save(zi, &rset,hits); + count_set_save(zi, &rset, hits); + else if ((i = rset_hits (rset)) >= 0) + *hits = i; else count_set (rset, hits); resultSetAdd (zi, setname, 1, rset);