X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fpazpar2.c;h=affac3fd1caf5fcffdebea142fb551c064bc9d94;hb=acafc85244b61fdc7dc1aaa8bd98bb26f559dc07;hp=c24ec00ec07bc45b8036f91ceace1641cdc209c0;hpb=82b7dfb4f633ed64ddb402d3cd81d391e6a936bc;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2.c b/src/pazpar2.c index c24ec00..affac3f 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.34 2007-01-15 20:01:53 quinn Exp $ */ +/* $Id: pazpar2.c,v 1.40 2007-01-17 14:01:19 quinn Exp $ */ #include #include @@ -491,8 +491,8 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) struct record_cluster *cluster; struct session *se = cl->session; xmlChar *mergekey, *mergekey_norm; - xmlChar *type; - xmlChar *value; + xmlChar *type = 0; + xmlChar *value = 0; struct conf_service *service = global_parameters.server->service; if (!xdoc) @@ -515,9 +515,11 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) mergekey_norm = nmem_strdup(se->nmem, (char*) mergekey); xmlFree(mergekey); normalize_mergekey(mergekey_norm, 0); - yaz_log(YLOG_LOG, "MK: '%s'", mergekey_norm); cluster = reclist_insert(se->reclist, res, mergekey_norm, &se->total_merged); + if (global_parameters.dump_records) + yaz_log(YLOG_LOG, "Cluster id %d from %s (#%d)", cluster->recid, + cl->database->url, cl->records); if (!cluster) { /* no room for record */ @@ -526,7 +528,6 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) } relevance_newrec(se->relevance, cluster); - type = value = 0; for (n = root->children; n; n = n->next) { if (type) @@ -547,6 +548,10 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) type = xmlGetProp(n, "type"); value = xmlNodeListGetString(xdoc, n->children, 0); + + if (!type || !value) + continue; + // First, find out what field we're looking at for (imeta = 0; imeta < service->num_metadata; imeta++) if (!strcmp(type, service->metadata[imeta].name)) @@ -599,7 +604,7 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) { struct record_metadata *mnode; for (mnode = *wheretoput; mnode; mnode = mnode->next) - if (!strcmp(mnode->data.text, mnode->data.text)) + if (!strcmp(mnode->data.text, newm->data.text)) break; if (!mnode) { @@ -647,12 +652,6 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) (*wheretoput)->data.number.min = first; if (last > (*wheretoput)->data.number.max) (*wheretoput)->data.number.max = last; - if (sk) - { - union data_types *sdata = cluster->sortkeys[md->sortkey_offset]; - sdata->number.min = first; - sdata->number.max = last; - } } #ifdef GAGA if (sk) @@ -668,7 +667,16 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) if (md->rank) relevance_countwords(se->relevance, cluster, value, md->rank); if (md->termlist) - add_facet(se, type, value); + { + if (md->type == Metadata_type_year) + { + char year[64]; + sprintf(year, "%d", last); + add_facet(se, type, year); + } + else + add_facet(se, type, value); + } xmlFree(type); xmlFree(value); type = value = 0; @@ -676,6 +684,10 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) else yaz_log(YLOG_WARN, "Unexpected element %s in internal record", n->name); } + if (type) + xmlFree(type); + if (value) + xmlFree(value); xmlFreeDoc(xdoc); @@ -702,6 +714,7 @@ static void ingest_records(struct client *cl, Z_Records *r) { Z_NamePlusRecord *npr = rlist->records[i]; + cl->records++; if (npr->which != Z_NamePlusRecord_databaseRecord) { yaz_log(YLOG_WARN, "Unexpected record type, probably diagnostic"); @@ -743,7 +756,6 @@ static void do_presentResponse(IOCHAN i, Z_APDU *a) if (!*r->presentStatus && cl->state != Client_Error) { yaz_log(YLOG_DEBUG, "Good Present response"); - cl->records += *r->numberOfRecordsReturned; ingest_records(cl, r->records); cl->state = Client_Idle; } @@ -1550,7 +1562,8 @@ int main(int argc, char **argv) " -h [host:]port (REST protocol listener)\n" " -C cclconfig\n" " -s simpletargetfile\n" - " -p hostname[:portno] (HTTP proxy)\n"); + " -p hostname[:portno] (HTTP proxy)\n" + " -d (show internal records)\n"); exit(1); } }