X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsession.c;h=2dc9572ba722bfa0a4d61c3a5bc4a86a8e28dc68;hb=6190e1455b834dcbbd9d6577cc9773f9084c4487;hp=0ca35238d44ae769c798ce7896e85ecd1ab7aa07;hpb=1b7db6048c094ee48951ae9a354dcfd6209425ad;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index 0ca3523..2dc9572 100644 --- a/src/session.c +++ b/src/session.c @@ -35,6 +35,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #if HAVE_UNISTD_H #include #endif +#ifdef WIN32 +#include +#endif #include #include #include @@ -143,7 +146,7 @@ void pull_terms(NMEM nmem, struct ccl_rpn_node *n, char **termlist, int *num) } -static void add_facet(struct session *s, const char *type, const char *value) +void add_facet(struct session *s, const char *type, const char *value, int count) { int i; @@ -165,7 +168,7 @@ static void add_facet(struct session *s, const char *type, const char *value) = termlist_create(s->nmem, TERMLIST_HIGH_SCORE); s->num_termlists = i + 1; } - termlist_insert(s->termlists[i].termlist, value); + termlist_insert(s->termlists[i].termlist, value, count); } static xmlDoc *record_to_xml(struct session_database *sdb, const char *rec) @@ -978,7 +981,10 @@ static int get_mergekey_from_doc(xmlDoc *doc, xmlNode *root, const char *name, if (!strcmp((const char *) n->name, "metadata")) { xmlChar *type = xmlGetProp(n, (xmlChar *) "type"); - if (!strcmp(name, (const char *) type)) + if (type == NULL) { + yaz_log(YLOG_FATAL, "Missing type attribute on metadata element. Skipping!"); + } + else if (!strcmp(name, (const char *) type)) { xmlChar *value = xmlNodeListGetString(doc, n->children, 1); if (value) @@ -1137,6 +1143,7 @@ static int ingest_to_cluster(struct client *cl, \param cl client holds the result set for record \param rec record buffer (0 terminated) \param record_no record position (1, 2, ..) + \param nmem working NMEM \retval 0 OK \retval -1 failure */ @@ -1368,22 +1375,23 @@ static int ingest_to_cluster(struct client *cl, (char *) value, ser_md->rank, ser_md->name); - // construct facets ... - if (ser_md->termlist) + // construct facets ... unless the client already has reported them + if (ser_md->termlist && !client_has_facet(cl, (char *) type)) { + if (ser_md->type == Metadata_type_year) { char year[64]; sprintf(year, "%d", rec_md->data.number.max); - add_facet(se, (char *) type, year); + add_facet(se, (char *) type, year, 1); if (rec_md->data.number.max != rec_md->data.number.min) { sprintf(year, "%d", rec_md->data.number.min); - add_facet(se, (char *) type, year); + add_facet(se, (char *) type, year, 1); } } else - add_facet(se, (char *) type, (char *) value); + add_facet(se, (char *) type, (char *) value, 1); } // cleaning up