-/* $Id: zsets.c,v 1.115 2007-01-15 15:10:17 adam Exp $
+/* $Id: zsets.c,v 1.117 2007-01-16 15:31:23 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
int term_entries_max;
struct zebra_set *next;
int locked;
+ int estimated_hit_count;
zint cache_position; /* last position */
RSFD cache_rfd; /* rfd (NULL if not existing) */
}
-ZEBRA_RES resultSetSearch(ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
- Z_RPNQuery *rpn, ZebraSet sset)
+static ZEBRA_RES resultSetSearch(ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
+ Z_RPNQuery *rpn, ZebraSet sset)
{
RSET rset = 0;
oident *attrset;
int sort_status, i;
ZEBRA_RES res = ZEBRA_OK;
- zh->hits = 0;
-
sort_sequence = (Z_SortKeySpecList *)
nmem_malloc(nmem, sizeof(*sort_sequence));
sort_sequence->num_specs = 10; /* FIXME - Hard-coded number */
}
-ZEBRA_RES resultSetAddRPN (ZebraHandle zh, NMEM m, Z_RPNQuery *rpn,
- int num_bases, char **basenames,
- const char *setname)
+ZEBRA_RES resultSetAddRPN(ZebraHandle zh, NMEM m, Z_RPNQuery *rpn,
+ int num_bases, char **basenames,
+ const char *setname,
+ zint *hits, int *estimated_hit_count)
{
ZebraSet zebraSet;
int i;
ZEBRA_RES res;
- zh->hits = 0;
+ *hits = 0;
+ *estimated_hit_count = 0;
zebraSet = resultSetAdd(zh, setname, 1);
if (!zebraSet)
res = resultSetSearch(zh, zebraSet->nmem, zebraSet->rset_nmem,
rpn, zebraSet);
- zh->hits = zebraSet->hits;
+ *hits = zebraSet->hits;
+ if (zebraSet->estimated_hit_count)
+ *estimated_hit_count = 1;
+
if (zebraSet->rset)
zebraSet->rpn = rpn;
zebraSet->locked = 0;
s->cache_position = 0;
s->cache_rfd = 0;
s->approx_limit = zh->approx_limit;
+ s->estimated_hit_count = 0;
return s;
}
sort_info = zebraSet->sort_info;
sort_info->num_entries = 0;
zebraSet->hits = 0;
+ zebraSet->estimated_hit_count = 0;
rset_getterms(rset, 0, 0, &n);
terms = (TERMID *) nmem_malloc(nmem, sizeof(*terms)*n);
rset_getterms(rset, terms, n, &numTerms);
if (this_sys != psysno)
{ /* new record .. */
if (rfd->counted_items > rset->hits_limit)
+ {
+ zebraSet->estimated_hit_count = 1;
break;
+ }
if (psysno)
{ /* only if we did have a previous record */
score = (*rc->calc) (handle, psysno, pstaticrank,