+Added support for specification of staticrank for grs-class of filters.
+This is enabled by using 'staticrank indexname' in .abs. Contents of
+indexname (elm ... indexname:w) is then used as value for staticrank.
+
Implemented sorting via the ISAMB system. To enable, use sortindex:i in
zebra.cfg.
-/* $Id: d1_absyn.c,v 1.31 2006-10-26 23:49:14 adam Exp $
+/* $Id: d1_absyn.c,v 1.32 2006-12-22 13:57:25 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
res->reference = VAL_NONE;
res->tagset = 0;
res->encoding = 0;
+ res->staticrank = 0;
res->xpath_indexing =
(f ? DATA1_XPATH_INDEXING_DISABLE : default_xpath);
res->systags = 0;
(*systagsp)->value = nmem_strdup(data1_nmem_get(dh), argv[2]);
systagsp = &(*systagsp)->next;
}
+ else if (!strcmp(cmd, "staticrank"))
+ {
+ if (argc != 2)
+ {
+ yaz_log(YLOG_WARN, "%s:%d: Bad # or args for staticrank",
+ file, lineno);
+ }
+ else
+ {
+ res->staticrank = nmem_strdup(data1_nmem_get(dh), argv[1]);
+ }
+ }
else
{
yaz_log(YLOG_WARN, "%s:%d: Unknown directive '%s'", file,
*systagsp = 0;
return res;
}
+
+YAZ_EXPORT const char *data1_absyn_get_staticrank(data1_absyn *absyn)
+{
+ return absyn ? absyn->staticrank : 0;
+}
+
/*
* Local variables:
* c-basic-offset: 4
-/* $Id: d1_absyn.h,v 1.8 2006-09-29 10:02:46 adam Exp $
+/* $Id: d1_absyn.h,v 1.9 2006-12-22 13:57:26 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
struct data1_xpelement *xp_elements; /* pop */
struct data1_systag *systags;
char *encoding;
+ char *staticrank;
enum DATA1_XPATH_INDEXING xpath_indexing;
};
-/* $Id: data1.h,v 1.19 2006-10-26 23:49:14 adam Exp $
+/* $Id: data1.h,v 1.20 2006-12-22 13:57:26 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
YAZ_EXPORT void data1_absyn_destroy(data1_handle dh);
+YAZ_EXPORT const char *data1_absyn_get_staticrank(data1_absyn *absyn);
+
YAZ_END_CDECL
#endif
-/* $Id: recgrs.c,v 1.11 2006-11-30 11:03:57 adam Exp $
+/* $Id: recgrs.c,v 1.12 2006-12-22 13:57:27 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
}
+static void index_staticrank(struct recExtractCtrl *p,
+ RecWord *wrd,
+ data1_absyn *absyn)
+{
+ const char *staticrank_index = data1_absyn_get_staticrank(absyn);
+
+ if (staticrank_index && !strcmp(wrd->index_name, staticrank_index))
+ {
+ char valz[20];
+ size_t len = wrd->term_len;
+
+ if (len > sizeof(valz)-1)
+ len = sizeof(valz)-1;
+ memcpy(valz, wrd->term_buf, len);
+ valz[len] = '\0';
+ p->staticrank = atozint(valz);
+ }
+}
+
static void index_xpath(struct source_parser *sp, data1_node *n,
struct recExtractCtrl *p,
int level, RecWord *wrd,
int termlist_only = 1;
data1_termlist *tl;
int xpdone = 0;
+
if (!n->root->u.root.absyn
||
n->root->u.root.absyn->xpath_indexing == DATA1_XPATH_INDEXING_ENABLE)
termlist_only = 0;
}
+
switch (n->which)
{
case DATA1N_data:
fputc ('\n', stdout);
}
else
+ {
(*p->tokenAdd)(&wrd_tl);
+ index_staticrank(p, &wrd_tl, n->root->u.root.absyn);
+ }
if (wrd_tl.seqno > max_seqno)
max_seqno = wrd_tl.seqno;
}
wrd->term_buf = xp->value;
wrd->term_len = strlen(xp->value);
(*p->tokenAdd)(wrd);
+ index_staticrank(p, wrd,
+ n->root->u.root.absyn);
}
}
}
{
wrd->index_type = *tlist->structure;
wrd->index_name = tlist->index_name;
+ index_staticrank(p, wrd, n->root->u.root.absyn);
(*p->tokenAdd)(wrd);
}
}