X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsolr.c;h=ca35e56639c2ff38b59a849d74fa2627fc5d525b;hb=612ac7d30003582e44d4184c830eee7f1a1a0443;hp=d3e4ee24afd14eb4ff83ba0f9944309204b733b1;hpb=ce46d8646a527a8364d3aa152822b3680a7321bd;p=yaz-moved-to-github.git diff --git a/src/solr.c b/src/solr.c index d3e4ee2..ca35e56 100644 --- a/src/solr.c +++ b/src/solr.c @@ -452,6 +452,7 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, char *path; char *q; char *pos; + char *cp; int i = 0; z_HTTP_header_add_basic_auth(encode, &hreq->headers, @@ -460,19 +461,10 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, { 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; @@ -505,32 +497,33 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, 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")) + { + 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")) { - case Z_SRW_query_type_pqf: + 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, @@ -560,7 +553,17 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu, 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,