X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsession.c;h=f7c0b99cd498512685d4028166570662709d001c;hb=48e0165508cf435576b6b479ef504d9fba7da66a;hp=f2acbaaa7ad40218e5cb2b4241498688fb1be3f5;hpb=649a9d45b919c376ddcbb89e0d34c4efeeb29fb9;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index f2acbaa..f7c0b99 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 @@ -52,6 +55,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include #include +#include #define USE_TIMING 0 #if USE_TIMING @@ -142,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; @@ -164,7 +168,9 @@ 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); + yaz_log(YLOG_DEBUG, "Session: facets for %s: %s (%d)", type, value, count); + + termlist_insert(s->termlists[i].termlist, value, count); } static xmlDoc *record_to_xml(struct session_database *sdb, const char *rec) @@ -537,7 +543,7 @@ enum pazpar2_error_code search(struct session *se, } se->reclist = reclist_create(se->nmem); - gettimeofday(&tval, 0); + yaz_gettimeofday(&tval); tval.tv_sec += 5; @@ -977,7 +983,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) @@ -1136,6 +1145,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 */ @@ -1367,22 +1377,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