From 216a058d5cc5bdc3cc83cc239ccbec00f01c1aeb Mon Sep 17 00:00:00 2001 From: Sebastian Hammer Date: Thu, 4 Jan 2007 20:00:58 +0000 Subject: [PATCH] Added 'virtual' facet named 'xtargets' to termlist command, which returns information about targets with the most hitcounts. Description in PROTOCOL --- PROTOCOL | 46 +++++++++++++++++++++++++++----------------- src/http_command.c | 53 +++++++++++++++++++++++++++++++++++++++++---------- src/pazpar2.c | 4 ++-- www/test1/search.js | 6 +++--- 4 files changed, 77 insertions(+), 32 deletions(-) diff --git a/PROTOCOL b/PROTOCOL index 5e3ad07..a3a68c4 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -136,21 +136,33 @@ search.pz2?session=2044502273&command=termlist&name=author,subject Output: - 3 - - - Donald Knuth - 10 - - - Robert Pirsig - 2 - - - - - Computer programming - 10 - - +3 + + +Donald Knuth +10 + + +Robert Pirsig +2 + + + + +Computer programming +10 + + + +For the special termlist name "xtargets", results are returned about the targets +which have returned the most hits. The 'term' subtree has additional elements, +specifically a state and diagnostic field (in the example below, a target ID is +returned in place of 'name'. This may or may not change later. + + +library2.mcmaster.ca +11734 +Client_Idle +0 + diff --git a/src/http_command.c b/src/http_command.c index c4837a6..25871a0 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -1,5 +1,5 @@ /* - * $Id: http_command.c,v 1.5 2007-01-04 02:53:37 quinn Exp $ + * $Id: http_command.c,v 1.6 2007-01-04 20:00:58 quinn Exp $ */ #include @@ -144,6 +144,34 @@ static void cmd_init(struct http_channel *c) http_send_response(c); } +// Compares two hitsbytarget nodes by hitcount +static int cmp_ht(const void *p1, const void *p2) +{ + const struct hitsbytarget *h1 = p1; + const struct hitsbytarget *h2 = p2; + return h2->hits - h1->hits; +} + +// This implements functionality somewhat similar to 'bytarget', but in a termlist form +static void targets_termlist(WRBUF wrbuf, struct session *se) +{ + struct hitsbytarget *ht; + int count, i; + + if (!(ht = hitsbytarget(se, &count))) + return; + qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht); + for (i = 0; i < count && i < 15; i++) + { + wrbuf_puts(wrbuf, "\n\n"); + wrbuf_printf(wrbuf, "%s\n", ht[i].id); + wrbuf_printf(wrbuf, "%d\n", ht[i].hits); + wrbuf_printf(wrbuf, "%s\n", ht[i].state); + wrbuf_printf(wrbuf, "%d\n", ht[i].diagnostic); + wrbuf_puts(wrbuf, "\n\n"); + } +} + static void cmd_termlist(struct http_channel *c) { struct http_response *rs = c->response; @@ -177,16 +205,21 @@ static void cmd_termlist(struct http_channel *c) strncpy(tname, name, tp - name); tname[tp - name] = '\0'; - p = termlist(s->psession, tname, &len); wrbuf_printf(c->wrbuf, "\n\n", tname); - if (p) - for (i = 0; i < len; i++) - { - wrbuf_puts(c->wrbuf, "\n"); - wrbuf_printf(c->wrbuf, "%s", p[i]->term); - wrbuf_printf(c->wrbuf, "%d", p[i]->frequency); - wrbuf_puts(c->wrbuf, ""); - } + if (!strcmp(tname, "xtargets")) + targets_termlist(c->wrbuf, s->psession); + else + { + p = termlist(s->psession, tname, &len); + if (p) + for (i = 0; i < len; i++) + { + wrbuf_puts(c->wrbuf, "\n"); + wrbuf_printf(c->wrbuf, "%s", p[i]->term); + wrbuf_printf(c->wrbuf, "%d", p[i]->frequency); + wrbuf_puts(c->wrbuf, ""); + } + } wrbuf_puts(c->wrbuf, "\n"); name = tp; if (*name == ',') diff --git a/src/pazpar2.c b/src/pazpar2.c index 1537054..66a1d12 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.12 2007-01-04 07:38:36 adam Exp $ */; +/* $Id: pazpar2.c,v 1.13 2007-01-04 20:00:58 quinn Exp $ */; #include #include @@ -465,7 +465,7 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) } else if (!strcmp(n->name, "metadata")) { - xmlChar *type = xmlGetProp(n, "type"), *value; + xmlChar *type = xmlGetProp(n, "type"); if (type && !strcmp(type, "title")) { xmlChar *value = xmlNodeListGetString(xdoc, n->children, 0); diff --git a/www/test1/search.js b/www/test1/search.js index 94fd03a..c3658fc 100644 --- a/www/test1/search.js +++ b/www/test1/search.js @@ -1,4 +1,4 @@ -/* $Id: search.js,v 1.5 2007-01-04 03:06:40 quinn Exp $ +/* $Id: search.js,v 1.6 2007-01-04 20:00:58 quinn Exp $ * --------------------------------------------------- * Javascript container */ @@ -260,12 +260,12 @@ function show_termlist() } } - function check_termlist() { var url = "search.pz2?" + "command=termlist" + - "&session=" + session; + "&session=" + session + + "&name=" + "subject"; xtermlist = GetXmlHttpObject(); xtermlist.onreadystatechange=show_termlist; xtermlist.open("GET", url); -- 1.7.10.4