X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fpazpar2.c;h=2c05b8ce13a7801aa0d3cfa285dbf1c328409746;hb=e161d8d877ae9a61153f2ceb3956a48c3b0ef778;hp=3805d88ee6ddb6400c0edf1d92c66ad3c318b62e;hpb=8ca1269eac32c1ddc19d16dc4f74e9a1e3e0b8f9;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2.c b/src/pazpar2.c index 3805d88..2c05b8c 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.30 2007-01-15 04:34:28 quinn Exp $ */ +/* $Id: pazpar2.c,v 1.39 2007-01-16 23:42:10 quinn Exp $ */ #include #include @@ -319,7 +319,10 @@ char *normalize_mergekey(char *buf, int skiparticle) p++; } if (buf != pout) - *pout = '\0'; + do { + *(pout--) = '\0'; + } + while (pout > buf && *pout == ' '); return buf; } @@ -364,6 +367,8 @@ static void add_facet(struct session *s, const char *type, const char *value) { int i; + if (!*value) + return; for (i = 0; i < s->num_termlists; i++) if (!strcmp(s->termlists[i].name, type)) break; @@ -486,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) @@ -512,6 +517,9 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) normalize_mergekey(mergekey_norm, 0); 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 */ @@ -520,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) @@ -541,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)) @@ -567,7 +578,12 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) newm->next = 0; if (md->type == Metadata_type_generic) { + char *p; newm->data.text = nmem_strdup(se->nmem, value); + for (p = newm->data.text + strlen(newm->data.text) - 1; + p > newm->data.text && strchr(" ,/.", *p); p--) + *p = '\0'; + } else if (md->type == Metadata_type_year) { @@ -588,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) { @@ -611,7 +627,6 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) normalize_mergekey(s, (sk->type == Metadata_sortkey_skiparticle)); cluster->sortkeys[md->sortkey_offset]->text = s; - yaz_log(YLOG_LOG, "SK Longest: %s", s); } } } @@ -637,18 +652,14 @@ 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) { union data_types *sdata = cluster->sortkeys[md->sortkey_offset]; yaz_log(YLOG_LOG, "SK range: %d-%d", sdata->number.min, sdata->number.max); } +#endif } else yaz_log(YLOG_WARN, "Don't know how to merge on element name %s", md->name); @@ -664,6 +675,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); @@ -690,6 +705,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"); @@ -731,7 +747,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; } @@ -1538,7 +1553,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); } }