X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Frpn2solr.c;h=16f9f24e7d4b03c0b02cbcc8b32ab92ebbdfac95;hp=664ce2d08c95d9075dbbf277ca59ca65bce5bbe8;hb=fd9dee8f998fa0bc00ef967cfbdc732a9655e621;hpb=c4aebcfe8750bd421de0c06820fdddb4e4443a11 diff --git a/src/rpn2solr.c b/src/rpn2solr.c index 664ce2d..16f9f24 100644 --- a/src/rpn2solr.c +++ b/src/rpn2solr.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ /** @@ -48,7 +48,7 @@ static const char *lookup_index_from_string_attr(Z_AttributeList *attributes) } } if (server_choice) - return "solr.serverChoice"; + return "cql.serverChoice"; return 0; } @@ -68,27 +68,27 @@ static const char *lookup_relation_index_from_attr(Z_AttributeList *attributes) switch (*relation) { /* Unsure on whether this is the relation attribute constants? */ - case Z_ProximityOperator_Prox_lessThan: + case Z_ProximityOperator_Prox_lessThan: return 0; - case Z_ProximityOperator_Prox_lessThanOrEqual: + case Z_ProximityOperator_Prox_lessThanOrEqual: return 0; - case Z_ProximityOperator_Prox_equal: + case Z_ProximityOperator_Prox_equal: return ":"; - case Z_ProximityOperator_Prox_greaterThanOrEqual: + case Z_ProximityOperator_Prox_greaterThanOrEqual: return 0; - case Z_ProximityOperator_Prox_greaterThan: + case Z_ProximityOperator_Prox_greaterThan: return 0; - case Z_ProximityOperator_Prox_notEqual: + case Z_ProximityOperator_Prox_notEqual: return 0; - case 100: + case 100: /* phonetic is not implemented*/ - return 0; - case 101: + return 0; + case 101: /* stem is not not implemented */ - return 0; - case 102: + return 0; + case 102: /* relevance is supported in SOLR, but not implemented yet */ - return 0; + return 0; default: /* Invalid relation */ return 0; @@ -105,7 +105,7 @@ static const char *lookup_relation_index_from_attr(Z_AttributeList *attributes) } static int rpn2solr_attr(solr_transform_t ct, - Z_AttributeList *attributes, WRBUF w) + Z_AttributeList *attributes, WRBUF w, char **close_range) { const char *relation = solr_lookup_reverse(ct, "relation.", attributes); const char *index = solr_lookup_reverse(ct, "index.", attributes); @@ -116,17 +116,16 @@ static int rpn2solr_attr(solr_transform_t ct, index = lookup_index_from_string_attr(attributes); /* Attempt to fix bug #2978: Look for a relation attribute */ - if (!relation) + if (!relation) relation = lookup_relation_index_from_attr(attributes); if (!index) { - solr_transform_set_error(ct, - YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0); + solr_transform_set_error(ct, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0); return -1; } /* for serverChoice we omit index+relation+structure */ - if (strcmp(index, "solr.serverChoice")) + if (strcmp(index, "cql.serverChoice")) { wrbuf_puts(w, index); if (relation) @@ -137,17 +136,14 @@ static int rpn2solr_attr(solr_transform_t ct, else if (!strcmp(relation, "eq")) relation = ":"; else if (!strcmp(relation, "le")) { - /* TODO Not support as such, but could perhaps be transformed into a range - relation = ":[ * to "; - close_range = "]" - */ + /* TODO Not support as such, but could perhaps be transformed into a range */ + relation = ":[* TO "; + *close_range = "]"; } else if (!strcmp(relation, "ge")) { - /* TODO Not support as such, but could perhaps be transformed into a range - relation = "["; - relation = ":[ * to "; - close_range = "]" - */ + /* TODO Not support as such, but could perhaps be transformed into a range */ + relation = ":["; + *close_range = " TO *]"; } /* Missing mapping of not equal, phonetic, stem and relevance */ wrbuf_puts(w, relation); @@ -164,6 +160,8 @@ static int rpn2solr_attr(solr_transform_t ct, wrbuf_puts(w, " "); } } +// if (close_range) +// wrbuf_puts(w, close_range); } return 0; } @@ -214,7 +212,8 @@ static int rpn2solr_simple(solr_transform_t ct, Odr_int trunc = get_truncation(apt); wrbuf_rewind(w); - ret = rpn2solr_attr(ct, apt->attributes, w); + char *close_range = 0; + ret = rpn2solr_attr(ct, apt->attributes, w, &close_range); if (trunc == 0 || trunc == 1 || trunc == 100 || trunc == 104) ; @@ -258,7 +257,7 @@ static int rpn2solr_simple(solr_transform_t ct, i++; if (strchr(SOLR_SPECIAL, sterm[i])) wrbuf_putc(w, '\\'); - wrbuf_putc(w, sterm[i]); + wrbuf_putc(w, sterm[i]); } else if (sterm[i] == '?' && trunc == 104) { @@ -280,6 +279,8 @@ static int rpn2solr_simple(solr_transform_t ct, wrbuf_puts(w, "*"); if (must_quote) wrbuf_puts(w, "\""); + if (close_range) + wrbuf_puts(w, close_range); } if (ret == 0) pr(wrbuf_cstr(w), client_data);