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(wrbuf2)),
- &olimit);
- wrbuf_destroy(wrbuf2);
+ 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(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;
}
char *path;
char *q;
char *pos;
+ char *cp;
int i = 0;
z_HTTP_header_add_basic_auth(encode, &hreq->headers,
{
Z_SRW_searchRetrieveRequest *request = srw_pdu->u.request;
solr_op = "select";
- switch (srw_pdu->u.request->query_type)
- {
- case Z_SRW_query_type_pqf:
- yaz_add_name_value_str(encode, name, value, &i,
- "q", request->query.pqf);
- break;
- case Z_SRW_query_type_cql:
- yaz_add_name_value_str(encode, name, value, &i,
- "q", request->query.cql);
- break;
- default:
+ if (!srw_pdu->u.request->query)
return -1;
- }
+ /* not considering query type here ! */
+ yaz_add_name_value_str(encode, name, value, &i, "q", request->query);
if (srw_pdu->u.request->startRecord)
{
Odr_int start = *request->startRecord - 1;
else if (srw_pdu->which == Z_SRW_scan_request) {
Z_SRW_scanRequest *request = srw_pdu->u.scan_request;
solr_op = "terms";
- switch (srw_pdu->u.scan_request->query_type)
+ if (!srw_pdu->u.scan_request->scanClause)
+ return -1;
+ if (!strcmp(srw_pdu->u.scan_request->queryType, "pqf"))
{
- case Z_SRW_query_type_pqf:
+ yaz_add_name_value_str(encode, name, value, &i,
+ "terms.fl", request->scanClause);
+ yaz_add_name_value_str(encode, name, value, &i,
+ "terms.lower", request->scanClause);
+ }
+ else if (!strcmp(srw_pdu->u.scan_request->queryType, "cql"))
+ {
+ q = request->scanClause;
+ pos = strchr(q, ':');
+ if (pos != NULL) {
yaz_add_name_value_str(encode, name, value, &i,
- "terms.fl", request->scanClause.pqf);
+ "terms.lower", odr_strdup(encode, pos + 1));
+ *pos = '\0';
yaz_add_name_value_str(encode, name, value, &i,
- "terms.lower", request->scanClause.pqf);
- break;
- case Z_SRW_query_type_cql:
- q = request->scanClause.cql;
- pos = strchr(q, ':');
- if (pos != NULL) {
- yaz_add_name_value_str(encode, name, value, &i,
- "terms.lower", odr_strdup(encode, pos + 1));
- *pos = '\0';
- yaz_add_name_value_str(encode, name, value, &i,
- "terms.fl", odr_strdup(encode, q));
- *pos = ':';
- } else {
- yaz_add_name_value_str(encode, name, value, &i,
- "terms.lower", odr_strdup(encode, q));
- }
- break;
- default:
- return -1;
+ "terms.fl", odr_strdup(encode, q));
+ *pos = ':';
+ } else {
+ yaz_add_name_value_str(encode, name, value, &i,
+ "terms.lower", odr_strdup(encode, q));
+ }
}
+ else
+ return -1;
yaz_add_name_value_str(encode, name, value, &i,
"terms.sort", "index");
yaz_add_name_value_int(encode, name, value, &i,
odr_malloc(encode, strlen(hreq->path) +
strlen(uri_args) + strlen(solr_op) + 4);
- sprintf(path, "%s/%s?%s", hreq->path, solr_op, uri_args);
+ strcpy(path, hreq->path);
+ cp = strrchr(path, '/');
+ if (cp)
+ {
+ if (!strcmp(cp, "/select") || !strcmp(cp, "/"))
+ *cp = '\0';
+ }
+ strcat(path, "/");
+ strcat(path, solr_op);
+ strcat(path, "?");
+ strcat(path, uri_args);
hreq->path = path;
z_HTTP_header_add_content_type(encode, &hreq->headers,