X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Frpnsearch.c;h=f119eb57dc918920a28c4e020eecba92cbbd78aa;hp=873ca912e80196a46b66a34c07042dcfe24aece0;hb=b3f079a571e404665620e8eb3bb1dd7db1ff6669;hpb=dccd483bc75013a7b16542d27f92f956146aa570 diff --git a/index/rpnsearch.c b/index/rpnsearch.c index 873ca91..f119eb5 100644 --- a/index/rpnsearch.c +++ b/index/rpnsearch.c @@ -237,7 +237,7 @@ static void add_non_space(const char *start, const char *end, static int term_100_icu(zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term, - int right_trunc) + int mode) { int i; const char *res_buf = 0; @@ -251,7 +251,7 @@ static int term_100_icu(zebra_map_t zm, return 0; } wrbuf_write(display_term, display_buf, display_len); - if (right_trunc) + if (mode) { /* ICU sort keys seem to be of the form basechars \x01 accents \x01 length @@ -272,6 +272,8 @@ static int term_100_icu(zebra_map_t zm, } res_len = i; /* reduce res_len */ } + if (mode & 2) + wrbuf_puts(term_dict, ".*"); for (i = 0; i < res_len; i++) { if (strchr(REGEX_CHARS "\\", res_buf[i])) @@ -281,8 +283,11 @@ static int term_100_icu(zebra_map_t zm, wrbuf_putc(term_dict, res_buf[i]); } - if (right_trunc) + if (mode & 1) wrbuf_puts(term_dict, ".*"); + else if (mode) + wrbuf_puts(term_dict, "\x01\x01.*"); + return 1; } @@ -1055,6 +1060,20 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, return ZEBRA_OK; } break; + case 2: + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 2)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; + case 3: + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 3)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; default: zebra_setError_zint(zh, YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE, @@ -1811,6 +1830,7 @@ static ZEBRA_RES rpn_search_APT_numeric(ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, const Odr_oid *attributeSet, + zint hits_limit, NMEM stream, const char *index_type, int complete_flag, @@ -1826,7 +1846,7 @@ static ZEBRA_RES rpn_search_APT_numeric(ZebraHandle zh, ZEBRA_RES res; struct grep_info grep_info; int alloc_sets = 0; - zint hits_limit_value; + zint hits_limit_value = hits_limit; const char *term_ref_id_str = 0; zebra_term_limits_APT(zh, zapt, &hits_limit_value, &term_ref_id_str, @@ -2383,7 +2403,8 @@ static ZEBRA_RES rpn_search_database(ZebraHandle zh, } else if (!strcmp(search_type, "numeric")) { - res = rpn_search_APT_numeric(zh, zapt, termz, attributeSet, stream, + res = rpn_search_APT_numeric(zh, zapt, termz, attributeSet, hits_limit, + stream, index_type, complete_flag, rank_type, xpath_use, rset_nmem,