X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fsession.c;h=ee39c7bd52e11c59e86fdb3a29184f11f5e4e6ed;hb=2de4cab9b87f848767078447142668fc3c30e5c9;hp=545f0fccd6217ad5b27f7efb0167cb8808eebc2a;hpb=22cc5cd1bd9a791d80c8b36874dcb7856ce032b2;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index 545f0fc..ee39c7b 100644 --- a/src/session.c +++ b/src/session.c @@ -191,20 +191,31 @@ void add_facet(struct session *s, const char *type, const char *value, int count pp2_relevance_token_t prt; const char *facet_component; WRBUF facet_wrbuf = wrbuf_alloc(); + WRBUF display_wrbuf = wrbuf_alloc(); prt = pp2_relevance_tokenize(service->facet_pct); pp2_relevance_first(prt, value, 0); while ((facet_component = pp2_relevance_token_next(prt))) { + const char *display_component; if (*facet_component) { if (wrbuf_len(facet_wrbuf)) wrbuf_puts(facet_wrbuf, " "); wrbuf_puts(facet_wrbuf, facet_component); } + display_component = pp2_get_display(prt); + if (display_component) + { + if (wrbuf_len(display_wrbuf)) + wrbuf_puts(display_wrbuf, " "); + wrbuf_puts(display_wrbuf, display_component); + } } pp2_relevance_token_destroy(prt); - + + yaz_log(YLOG_LOG, "facet norm=%s", wrbuf_cstr(facet_wrbuf)); + yaz_log(YLOG_LOG, "facet display=%s", wrbuf_cstr(display_wrbuf)); if (wrbuf_len(facet_wrbuf)) { int i; @@ -229,10 +240,11 @@ void add_facet(struct session *s, const char *type, const char *value, int count #if 0 session_log(s, YLOG_DEBUG, "Facets for %s: %s norm:%s (%d)", type, value, wrbuf_cstr(facet_wrbuf), count); #endif - termlist_insert(s->termlists[i].termlist, wrbuf_cstr(facet_wrbuf), - count); + termlist_insert(s->termlists[i].termlist, wrbuf_cstr(display_wrbuf), + wrbuf_cstr(facet_wrbuf), count); } wrbuf_destroy(facet_wrbuf); + wrbuf_destroy(display_wrbuf); } static xmlDoc *record_to_xml(struct session *se, @@ -488,7 +500,7 @@ int session_set_watch(struct session *s, int what, ret = 0; } session_leave(s); - return 0; + return ret; } void session_alert_watch(struct session *s, int what) @@ -594,6 +606,7 @@ enum pazpar2_error_code search(struct session *se, const char *query, const char *startrecs, const char *maxrecs, const char *filter, + const char *limit, const char **addinfo) { int live_channels = 0; @@ -601,6 +614,7 @@ enum pazpar2_error_code search(struct session *se, int no_failed = 0; struct client_list *l; struct timeval tval; + facet_limits_t facet_limits; session_log(se, YLOG_DEBUG, "Search"); @@ -627,6 +641,13 @@ enum pazpar2_error_code search(struct session *se, tval.tv_sec += 5; + facet_limits = facet_limits_create(limit); + if (!facet_limits) + { + *addinfo = "limit"; + session_leave(se); + return PAZPAR2_MALFORMED_PARAMETER_VALUE; + } for (l = se->clients; l; l = l->next) { struct client *cl = l->client; @@ -637,7 +658,7 @@ enum pazpar2_error_code search(struct session *se, client_set_startrecs(cl, atoi(startrecs)); if (prepare_session_database(se, client_get_database(cl)) < 0) ; - else if (client_parse_query(cl, query) < 0) + else if (client_parse_query(cl, query, facet_limits) < 0) no_failed++; else { @@ -649,6 +670,7 @@ enum pazpar2_error_code search(struct session *se, client_start_search(cl); } } + facet_limits_destroy(facet_limits); session_leave(se); if (no_working == 0) { @@ -772,7 +794,6 @@ void session_destroy(struct session *se) { nmem_destroy(se->nmem); service_destroy(se->service); yaz_mutex_destroy(&se->session_mutex); - wrbuf_destroy(se->wrbuf); } /* Depreciated: use session_destroy */ @@ -815,7 +836,6 @@ struct session *new_session(NMEM nmem, struct conf_service *service, session->clients = 0; session->session_nmem = nmem; session->nmem = nmem_create(); - session->wrbuf = wrbuf_alloc(); session->databases = 0; for (i = 0; i <= SESSION_WATCH_MAX; i++) {