X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsession.c;h=710bc2e0e3f81a330d488e24cb7b72fb555170c4;hb=5bb55be401f739bf7405a6cb04528e3bc9f93b5f;hp=bcd73535a2bf5c08c64ab0f36a246d7c8db8a9d0;hpb=0e0ddf5be474a96ae8838fe9845858b7ca96b9d8;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index bcd7353..710bc2e 100644 --- a/src/session.c +++ b/src/session.c @@ -148,30 +148,51 @@ void pull_terms(NMEM nmem, struct ccl_rpn_node *n, char **termlist, int *num) void add_facet(struct session *s, const char *type, const char *value, int count) { - int i; - - if (!*value) - return; - for (i = 0; i < s->num_termlists; i++) - if (!strcmp(s->termlists[i].name, type)) - break; - if (i == s->num_termlists) + struct conf_service *service = s->service; + pp2_relevance_token_t prt; + const char *facet_component; + WRBUF facet_wrbuf = wrbuf_alloc(); + prt = pp2_relevance_tokenize(service->facet_pct); + + pp2_relevance_first(prt, value, 0); + while ((facet_component = pp2_relevance_token_next(prt))) { - if (i == SESSION_MAX_TERMLISTS) + if (*facet_component) { - session_log(s, YLOG_FATAL, "Too many termlists"); - return; + if (wrbuf_len(facet_wrbuf)) + wrbuf_puts(facet_wrbuf, " "); + wrbuf_puts(facet_wrbuf, facet_component); } - - s->termlists[i].name = nmem_strdup(s->nmem, type); - s->termlists[i].termlist - = termlist_create(s->nmem, TERMLIST_HIGH_SCORE); - s->num_termlists = i + 1; } - session_log(s, YLOG_DEBUG, "Session: facets for %s: %s (%d)", - type, value, count); - - termlist_insert(s->termlists[i].termlist, value, count); + pp2_relevance_token_destroy(prt); + + if (wrbuf_len(facet_wrbuf)) + { + int i; + for (i = 0; i < s->num_termlists; i++) + if (!strcmp(s->termlists[i].name, type)) + break; + if (i == s->num_termlists) + { + if (i == SESSION_MAX_TERMLISTS) + { + session_log(s, YLOG_FATAL, "Too many termlists"); + wrbuf_destroy(facet_wrbuf); + return; + } + + s->termlists[i].name = nmem_strdup(s->nmem, type); + s->termlists[i].termlist + = termlist_create(s->nmem, TERMLIST_HIGH_SCORE); + s->num_termlists = i + 1; + } + + session_log(s, YLOG_DEBUG, "Session: facets for %s: %s norm:%s (%d)", + type, value, wrbuf_cstr(facet_wrbuf), count); + termlist_insert(s->termlists[i].termlist, wrbuf_cstr(facet_wrbuf), + count); + } + wrbuf_destroy(facet_wrbuf); } static xmlDoc *record_to_xml(struct session *se,