X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsolr.c;fp=src%2Fsolr.c;h=9897bb1799ec91c2d4ce5cab41e13b33e631437e;hp=ca35e56639c2ff38b59a849d74fa2627fc5d525b;hb=2edd9764942ec2d62cabcb4190a69921c60af293;hpb=9bca108ddbc555efaffb85dda76581eaeed44b4e diff --git a/src/solr.c b/src/solr.c index ca35e56..9897bb1 100644 --- a/src/solr.c +++ b/src/solr.c @@ -397,32 +397,62 @@ static int yaz_solr_encode_facet_field( struct yaz_facet_attr attr_values; yaz_facet_attr_init(&attr_values); yaz_facet_attr_get_z_attributes(attribute_list, &attr_values); - // TODO do we want to support server decided if (attr_values.errcode) return -1; if (attr_values.useattr) { WRBUF wrbuf = wrbuf_alloc(); - wrbuf_puts(wrbuf, (char *) attr_values.useattr); yaz_add_name_value_str(encode, name, value, i, "facet.field", - odr_strdup(encode, wrbuf_cstr(wrbuf))); + odr_strdup(encode, attr_values.useattr)); + if (attr_values.limit > 0) { - WRBUF wrbuf2 = wrbuf_alloc(); - Odr_int olimit; - wrbuf_puts(wrbuf2, "f."); - wrbuf_puts(wrbuf2, wrbuf_cstr(wrbuf)); - wrbuf_puts(wrbuf2, ".facet.limit"); - olimit = attr_values.limit; + Odr_int v = attr_values.limit; + wrbuf_rewind(wrbuf); + wrbuf_printf(wrbuf, "f.%s.facet.limit", attr_values.useattr); + yaz_add_name_value_int(encode, name, value, i, + odr_strdup(encode, wrbuf_cstr(wrbuf)), + &v); + } + if (attr_values.start > 1) + { + Odr_int v = attr_values.start - 1; + wrbuf_rewind(wrbuf); + wrbuf_printf(wrbuf, "f.%s.facet.offset", attr_values.useattr); yaz_add_name_value_int(encode, name, value, i, - odr_strdup(encode, wrbuf_cstr(wrbuf2)), - &olimit); - wrbuf_destroy(wrbuf2); + odr_strdup(encode, wrbuf_cstr(wrbuf)), + &v); + } + if (attr_values.sortorder == 1) + { + wrbuf_rewind(wrbuf); + wrbuf_printf(wrbuf, "f.%s.facet.sort", attr_values.useattr); + yaz_add_name_value_str(encode, name, value, i, + odr_strdup(encode, wrbuf_cstr(wrbuf)), + "index"); } wrbuf_destroy(wrbuf); } + else + { + if (attr_values.limit > 0) + { + Odr_int v = attr_values.limit; + yaz_add_name_value_int(encode, name, value, i, "facet.limit", &v); + } + if (attr_values.start > 1) + { + Odr_int v = attr_values.start - 1; + yaz_add_name_value_int(encode, name, value, i, "facet.offset", &v); + } + if (attr_values.sortorder == 1) + { + yaz_add_name_value_str(encode, name, value, i, "facet.sort", + "index"); + } + } return 0; }