X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsolr.c;h=51f30748a1f868979df22ad8348339d8f0377766;hp=4e0a74a4683bc88a066ebdb18f8aa11d4ee01c13;hb=9274947f1618751c10d1eb941692397537e79cae;hpb=93cf5a348dd93d545c30ffa2f2b1aa4bfee62cbb diff --git a/src/solr.c b/src/solr.c index 4e0a74a..51f3074 100644 --- a/src/solr.c +++ b/src/solr.c @@ -21,6 +21,7 @@ #include #include +#define SOLR_MAX_PARAMETERS 100 const char *xml_node_attribute_value_get(xmlNodePtr ptr, const char *node_name, const char *attribute_name) { @@ -161,7 +162,7 @@ static void yaz_solr_decode_facet_counts(ODR o, xmlNodePtr root, Z_SRW_searchRet facet_list_field_set(o, facet_list, yaz_solr_decode_facet_field(o, node, sr), num_facets); num_facets++; } - sr->facet_list = facet_list; + sr->facetList = facet_list; break; } } @@ -226,17 +227,37 @@ int yaz_solr_decode_response(ODR o, Z_HTTP_Response *hres, Z_SRW_PDU **pdup) #endif } -void solr_encode_facet_field(ODR encode, Z_FacetField *facet_field) { +static void yaz_solr_encode_facet_field(ODR encode, char **name, char **value, int *i, Z_FacetField *facet_field, int *limit) { + Z_AttributeList *attribute_list = facet_field->attributes; + 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 && attr_values.useattr) { + yaz_add_name_value_str(encode, name, value, i, "facet.field", (char *) attr_values.useattr); + // TODO max(attr_values, *limit); + if (attr_values.limit > 0 && attr_values.limit > *limit) { + *limit = attr_values.limit; + } + } +} + +static void yaz_solr_encode_facet_list(ODR encode, char **name, char **value, int *i, Z_FacetList *facet_list, int *limit) { + int index; + for (index = 0; index < facet_list->num; index++) { + yaz_solr_encode_facet_field(encode, name, value, i, facet_list->elements[index], limit); + + } } + int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, ODR encode, const char *charset) { const char *solr_op = 0; //TODO Change. not a nice hard coded, unchecked limit. - int max = 100; - char *name[100], *value[100]; + char *name[SOLR_MAX_PARAMETERS], *value[SOLR_MAX_PARAMETERS]; char *uri_args; char *path; int i = 0; @@ -273,14 +294,15 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, yaz_add_name_value_str(encode, name, value, &i, "fl", request->recordSchema); - if (request->facet_list) { - int index; - Z_FacetList *facet_list = request->facet_list; + if (request->facetList) { + Z_FacetList *facet_list = request->facetList; + int limit; + Odr_int olimit; yaz_add_name_value_str(encode, name, value, &i, "facet", "true"); - for (index = 0; index < facet_list->num; index++) { - //TODO impl - //solr_encode_facet_field(encode, name, value, &i, facet_list->elements[index]); - } + yaz_solr_encode_facet_list(encode, name, value, &i, facet_list, &limit); + olimit = limit; + yaz_add_name_value_int(encode, name, value, &i, "facet.limit", &olimit); + } break; }