projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added support for date-value termlists
[pazpar2-moved-to-github.git]
/
src
/
pazpar2.c
diff --git
a/src/pazpar2.c
b/src/pazpar2.c
index
fee61ee
..
affac3f
100644
(file)
--- a/
src/pazpar2.c
+++ b/
src/pazpar2.c
@@
-1,4
+1,4
@@
-/* $Id: pazpar2.c,v 1.31 2007-01-15 05:40:24 quinn Exp $ */
+/* $Id: pazpar2.c,v 1.40 2007-01-17 14:01:19 quinn Exp $ */
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
@@
-319,7
+319,10
@@
char *normalize_mergekey(char *buf, int skiparticle)
p++;
}
if (buf != pout)
p++;
}
if (buf != pout)
- *pout = '\0';
+ do {
+ *(pout--) = '\0';
+ }
+ while (pout > buf && *pout == ' ');
return buf;
}
return buf;
}
@@
-364,6
+367,8
@@
static void add_facet(struct session *s, const char *type, const char *value)
{
int i;
{
int i;
+ if (!*value)
+ return;
for (i = 0; i < s->num_termlists; i++)
if (!strcmp(s->termlists[i].name, type))
break;
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;
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)
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);
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 */
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);
}
relevance_newrec(se->relevance, cluster);
- type = value = 0;
for (n = root->children; n; n = n->next)
{
if (type)
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);
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))
// 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)
{
newm->next = 0;
if (md->type == Metadata_type_generic)
{
+ char *p;
newm->data.text = nmem_strdup(se->nmem, value);
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)
{
}
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)
{
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)
{
break;
if (!mnode)
{
@@
-636,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;
(*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)
}
#ifdef GAGA
if (sk)
@@
-657,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)
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;
xmlFree(type);
xmlFree(value);
type = value = 0;
@@
-665,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);
}
else
yaz_log(YLOG_WARN, "Unexpected element %s in internal record", n->name);
}
+ if (type)
+ xmlFree(type);
+ if (value)
+ xmlFree(value);
xmlFreeDoc(xdoc);
xmlFreeDoc(xdoc);
@@
-691,6
+714,7
@@
static void ingest_records(struct client *cl, Z_Records *r)
{
Z_NamePlusRecord *npr = rlist->records[i];
{
Z_NamePlusRecord *npr = rlist->records[i];
+ cl->records++;
if (npr->which != Z_NamePlusRecord_databaseRecord)
{
yaz_log(YLOG_WARN, "Unexpected record type, probably diagnostic");
if (npr->which != Z_NamePlusRecord_databaseRecord)
{
yaz_log(YLOG_WARN, "Unexpected record type, probably diagnostic");
@@
-732,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");
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;
}
ingest_records(cl, r->records);
cl->state = Client_Idle;
}
@@
-1539,7
+1562,8
@@
int main(int argc, char **argv)
" -h [host:]port (REST protocol listener)\n"
" -C cclconfig\n"
" -s simpletargetfile\n"
" -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);
}
}
exit(1);
}
}