X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Frelevance.c;h=4d5b6e44d29a047f26a9a1fdf90660a39260f116;hb=b22c4ae2c14eb5d2b991e6233cdea2a9fd7dcf6c;hp=055198032ed948fdeb8c37d726a808b259dfbd16;hpb=2185d73f6344aae67a124f1bc2a2e5695003cbd6;p=pazpar2-moved-to-github.git diff --git a/src/relevance.c b/src/relevance.c index 0551980..4d5b6e4 100644 --- a/src/relevance.c +++ b/src/relevance.c @@ -83,6 +83,47 @@ static struct word_entry *word_entry_match(struct relevance *r, return 0; } +int relevance_snippet(struct relevance *r, + const char *words, const char *name, + WRBUF w_snippet) +{ + int no = 0; + const char *norm_str; +#if 1 + yaz_log(YLOG_LOG, "relevance_snippet for field=%s content=%s", + name, words); +#endif + pp2_charset_token_first(r->prt, words, 0); + + while ((norm_str = pp2_charset_token_next(r->prt))) + { + size_t org_start, org_len; + struct word_entry *entries = r->entries; + int highlight = 0; + int i; + + pp2_get_org(r->prt, &org_start, &org_len); + for (; entries; entries = entries->next, i++) + { + yaz_log(YLOG_LOG, "Compare: %s %s", norm_str, entries->norm_str); + if (*norm_str && !strcmp(norm_str, entries->norm_str)) + highlight = 1; + } + if (highlight) + wrbuf_puts(w_snippet, ""); + + wrbuf_xmlputs_n(w_snippet, words + org_start, org_len); + if (highlight) + wrbuf_puts(w_snippet, ""); + no += highlight; + } + if (no) + { + yaz_log(YLOG_LOG, "SNIPPET match: %s", wrbuf_cstr(w_snippet)); + } + return no; +} + void relevance_countwords(struct relevance *r, struct record_cluster *cluster, const char *words, const char *rank, const char *name)