X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2_config.c;h=052b457d5371708b789c9d49f6aebf34c55a83a2;hb=63466e474f690a04fe0ebdaaac87914768977757;hp=6e7652c4aab67faa45c2d3f6afe1e4987e4c4c31;hpb=8961ed761e348e972f00d015284ce75c16b1648c;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 6e7652c..052b457 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -133,10 +133,15 @@ struct conf_service *service_init(struct conf_server *server, service->z3950_session_timeout = 180; service->z3950_operation_timeout = 30; service->rank_cluster = 1; + service->rank_debug = 0; + service->rank_follow = 0.0; + service->rank_lead = 0.0; + service->rank_length = 2; service->charsets = 0; service->id = service_id ? nmem_strdup(nmem, service_id) : 0; + // Setup a dictionary from server. service->dictionary = 0; @@ -156,6 +161,8 @@ struct conf_service *service_init(struct conf_server *server, = nmem_malloc(nmem, sizeof(struct conf_metadata) * service->num_metadata); service->num_sortkeys = num_sortkeys; + + service->default_sort = nmem_strdup(nmem, "relevance"); service->sortkeys = 0; if (service->num_sortkeys) service->sortkeys @@ -617,17 +624,77 @@ static struct conf_service *service_create_static(struct conf_server *server, else if (!strcmp((const char *) n->name, "rank")) { char *rank_cluster = (char *) xmlGetProp(n, (xmlChar *) "cluster"); + char *rank_debug = (char *) xmlGetProp(n, (xmlChar *) "debug"); + char *rank_follow = (char *) xmlGetProp(n, (xmlChar *) "follow"); + char *rank_lead = (char *) xmlGetProp(n, (xmlChar *) "lead"); + char *rank_length= (char *) xmlGetProp(n, (xmlChar *) "length"); + if (rank_cluster) + { + if (!strcmp(rank_cluster, "yes")) + service->rank_cluster = 1; + else if (!strcmp(rank_cluster, "no")) + service->rank_cluster = 0; + else + { + yaz_log(YLOG_FATAL, "service: rank@cluster boolean"); + return 0; + } + } + if (rank_debug) + { + if (!strcmp(rank_debug, "yes")) + service->rank_debug = 1; + else if (!strcmp(rank_debug, "no")) + service->rank_debug = 0; + else + { + yaz_log(YLOG_FATAL, "service: rank@debug boolean"); + return 0; + } + } + if (rank_follow) + { + service->rank_follow = atof(rank_follow); + } + if (rank_lead) + { + service->rank_lead = atof(rank_lead); + } + if (rank_length) + { + if (!strcmp(rank_length, "linear")) + service->rank_length = 2; + else if (!strcmp(rank_length, "log")) + service->rank_length = 1; + else if (!strcmp(rank_length, "none")) + service->rank_length = 0; + else + { + yaz_log(YLOG_FATAL, "service: rank@length linear|log|none"); + return 0; + } + } + xmlFree(rank_cluster); + xmlFree(rank_debug); + xmlFree(rank_follow); + xmlFree(rank_lead); + xmlFree(rank_length); + } + else if (!strcmp((const char *) n->name, "sort-default")) + { + char *default_sort = (char *) xmlGetProp(n, (xmlChar *) "field"); - if (rank_cluster && !strcmp(rank_cluster, "yes")) - service->rank_cluster = 1; - else if (rank_cluster && !strcmp(rank_cluster, "no")) - service->rank_cluster = 0; + if (default_sort && strcmp(default_sort, "")) { + service->default_sort = nmem_strdup(service->nmem, default_sort); + yaz_log(YLOG_LOG, "service %s: default sort order configured to: %s", + service_id ? service_id : "unnamed", default_sort); + } else { - yaz_log(YLOG_FATAL, "service: rank@cluster boolean"); + yaz_log(YLOG_FATAL, "default sort order is invalid: %s", default_sort); return 0; } - xmlFree(rank_cluster); + xmlFree(default_sort); } else {